Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.17;
Скачать: CL | DM;

Вниз

Экспорт данных в 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
14-53691
Думкин
2004-01-30 06:04
2004.02.17
С днем рождения! 30 января.


3-53400
Ермек
2004-01-26 02:48
2004.02.17
OleContainer


14-53740
sad
2004-01-28 15:55
2004.02.17
Сисадминам и пользователям на заметку


1-53641
h0use
2004-02-06 15:46
2004.02.17
Как в компоненет создавать about?


9-53350
Norlin
2003-08-07 02:02
2004.02.17
Вопрос ПО ПОСТРОЕНИЮ ИГР!!!