Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
ВнизЭкспорт данных в Excel Найти похожие ветки
← →
Barbariska (2004-02-09 08:26) [0]Подскажите, плиз, как из ADOQuery отправить данные в Excel не по одной записи, а всем скопом.
← →
Семен Сорокин (2004-02-09 09:47) [1]сохранить в dbf\txt\mdb\xml - формате , а затем открыть в Excel"e.
← →
Palladin (2004-02-09 09:49) [2]Получаем данные и формируем буффер отправки
var
strBuffer:string;
nRecCounter:integer;
strBuffer:="";
if (not q.IsEmpty) and (q.RecordCount=0) then nRecCounter:=0
else nRecCounter:=-1;
while not q.eof do
begin
for i:=0 to q.FieldCount-1 do strBuffer:=strBuffer+q.Fields[i].AsString+#9;
if q.FieldCount<>0 then strBuffer[Length(srtBuffer)]:=#13
else strBuffer:=strBuffer+#13;
strBuffer:=strBuffer+#10;
if nRecCounter<>-1 then nRecCounter:=nRecCounter+1;
q.next;
end;
подключаемся к Excel через DDE
var
xlDDE:TDDEClientConv;
nLeftLTCell,nTopLTCell,nRightRBCell,nBottomRBCell:integer;
xlDDE:=TDDEClientConv.Create(nil);
xlDDE.SetLink("EXCEL", strSheetName);
nLeftLTCell:=1;
nTopLTCell:=1;
nRightRBCell:=nLeftRBCell+q.FieldCount;
if nRecCounter=-1 then nBottomRBCell:=nTopLTCell+q.RecordCount
else nBottomRBCell:=nTopLTCell+nRecCounter;
xlDDE.PokeData(OLEVariant(xlApp.Range[IntToExcelColumn(nLeftLTCell)+IntToStr(nTopLTCell),IntToExcelColumn(nRightRBCell)+ IntToStr(nBottomLTCell)]).Address[ReferenceStyle:=xlR1C1], pchar(buffer));
xlDDE.free;
Функцию IntToExcelColumn оставлю на домашнее задание. Она должна уметь переводить число 1 в строку "A", а число 32 в строку "AF";
← →
zamkom (2004-02-09 09:50) [3]Всем скопом ты их не передаш завяжи их в цикл и передавай по одному. Вот пример:
procedure TForm1.Button1Click(Sender: TObject);
var
xlap,xl:variant;
i : integer;
begin
XLap:= CreateOLEObject("Excel.Application");
xlap.workbooks.add;
xl:=xlap.Workbooks[1].Sheets[1];
For i:=1 to ADOQuery.RecordCount do
begin
xl.Cells[i,1].Value:=ADOQuery.FIeldByName("qwerty").AsString ;
end;
xlap.ActiveWorkbook.SaveAs("123.xls");
xlap.quit;
end;
← →
Palladin (2004-02-09 09:53) [4]
> zamkom © (09.02.04 09:50) [3]
А Вы я смотрю богатым опытом обладаете...
← →
Polevi (2004-02-09 09:58) [5]>Palladin © (09.02.04 09:49) [2]
не пользовался вашим способом, он будет работать при любом объеме данных ?
я использую PasteSpecial, и там может не хватить памяти под буфер, приходится бить данные на блоки
← →
zamkom (2004-02-09 10:02) [6]Palladin © (09.02.04 09:53) [4]
Богатым опытом не обладаю, но в силу своих скромных возможностей делаю, что могу.
← →
Palladin (2004-02-09 10:04) [7]
> Polevi © (09.02.04 09:58) [5]
однажды в порядке эксперимента передавал 75 мегобайт... и хоть бы что... правда шел дикий своп... самой оперативки мало было... но никто никуда не вылетел, все окончилось хорошо...
при предаче естестенно нужно учитывать что все таки максимальное количество строк имеет ограничение в самом эксель... так же возникают проблемы при передаче Даты/Времени, эксель их воспринимает как целочисленные значения, но это исправляется предварительной установкой формата ячеек в Дата... иногда случается наоборот целочисленные значения эксель пытается показать как дату время... решается это тем же самым способом...
считаю, что через DDE один из наибыстрейших способов пердачи больших массивов...
← →
Barbariska (2004-02-09 10:06) [8]Семен Сорокин, может еще подскажешь как сохранить в формате dbf/txt и проч.
Zamkom, спасибо так и сделала, просто очень большая выборка и перебором очень долго.
Palladin, спасибо, попробую. Правда не очень уверена в собственных силах, может разберусь :)))
в любом случае всем спасибо)))
← →
Polevi (2004-02-09 10:33) [9]а вообще на королевстве есть хорошая статься на эту тему
← →
Polevi (2004-02-09 10:38) [10]http://www.delphikingdom.ru/asp/viewitem.asp?UrlItem=/helloworld/excel3.htm
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c