|
Тема |
Re: Делфи чрез АДО в ЕКСЕЛ [re: ADO] |
|
Автор | php (Нерегистриран) | |
Публикувано | 23.09.09 21:08 |
|
|
Това което съм ти дал като вариант е формат за експорт към Ексел 97-2003 чрез работа с текстов файл. Имам го само на php и затова ти го пратих така.
Първия вариант който си ползвал е по-добър - използваш самия ексел да си генерира файл, недостатък е че трябва да имаш инсталиран офис на всеки комп на който пускаш програмата. За ускоряване - вместо директно писане в клетка и комуникация с ексела е по-добре всички данни да се "изсипят" в един масив:
DataArray:array of array of variant;
...
Ако данните са в TTable
ii:=0;
REPEAT
for jj:=0 to ColCount-1 do
case Table.FieldDefs[jj].DataType of
ftInteger:DataArray[ii,jj]:=Table.Fields[jj].AsInteger;
ftFloat:DataArray[ii,jj]:=Table.Fields[jj].AsFloat;
ftString:
begin
sTemp:=Table.Fields[jj].AsString;
DataArray[ii,jj]:=sTemp;
end;
ftDate:DataArray[ii,jj]:=Table.Fields[jj].AsString;
ftMemo:DataArray[ii,jj]:=Table.Fields[jj].AsString;
else
messagedlg('ii='+inttostr(ii)+' jj='+inttostr(jj),mterror,[mbOK],0);
end;
ii:=ii+1;
Table.Next();
UNTIL Table.Eof;
...
Worksheet.Range['A1',Worksheet.Cells.Item[CurrRowCount,ColCount]].Value :=DataArray;
Така става с пъти по-бързо, спрямо директни обръщения за всяка клетка.
Варианта с php пък е още по-бърз и универсален - не е необходим инсталиран ексел. Но ще трябва да се потрудиш да го преведеш на делфи, напр.:
function XLS_BOF():string;
var
sReturn:string;
begin
sReturn:='';
sReturn:=sReturn + #09+#08+#08+#00+#00+#00+#16+#00+#00+#00+#00+#00;
Result:=sReturn;
end;
Имай предвид, че в php както и в С подредбата старши-младши битове е противоположна от тази в Делфи - оттам е и разликата в превода.
|
| |
|
|
|