Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
1-53478
VID
2004-02-05 19:57
2004.02.17
Версия библиотеки RichEdit


1-53588
Сибулбо
2004-02-08 12:08
2004.02.17
Dos>Win кодировка


3-53427
Alex_x
2004-01-26 10:03
2004.02.17
Как вставить (апостроф) в базу?


1-53497
Алексей
2004-02-06 08:14
2004.02.17
массив форм


1-53538
Ivolg
2004-02-05 14:36
2004.02.17
Скин





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский