delphi中快速写入excel的问题,200分够不够?(200分)

  • 主题发起人 wydelphi
  • 开始时间
W

wydelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
用server控件太慢了,看到以前有人说用clipboard快,还有人说不用ole,直接写excel,
谁能给贴段代码,非常急,多谢多谢。
 
Server不会慢,代码如下:
procedure TfrmExecl.btnExportClick(Sender: TObject);
var
wkBook: _Workbook;
wkSheet: _Worksheet;
LCID,Line,Col,i,j: integer;
FileName: TFileName;
Datas,HeadLine: Variant;
begin
SaveDialog1.Execute;
FileName := '';
FileName := SaveDialog1.FileName;
if FileName = '' then Abort;
Line := ADODataSet1.Recordset.RecordCount;
Col := ADODataSet1.Fields.Count;

Datas := VarArrayCreate([1,Line,1,Col],varVariant);
HeadLine := VarArrayCreate([1,Col],varVAriant);
ExcelApplication1.Connect;
LCID := GetUserDefaultLCID();
wkBook := ExcelApplication1.Workbooks.Add(EmptyParam, LCID);
wkSheet := wkBook.Sheets[1] as _WorkSheet;
ADODataSet1.DisableControls;
for i := 0 to Col - 1 do
HeadLine[i+1] := ADODataSet1.Fields.FieldName;

ADODataSet1.First;
for j := 0 to Line - 1 do
begin
for i := 0 to Col - 1 do
Datas[j+1,i+1] := ADODataSet1.Fields.Value;
ADODataSet1.Next;
end;
with wkSheet do
begin
Range[cells.Item[1,1],cells.Item[1,Col]].Value := HeadLine;
Range[cells.Item[2,1],cells.Item[Line+1,Col]].Value := Datas;
end;
ADODataSet1.EnableControls;
wkBook.Close(True, FileName, EmptyParam, LCID);
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
MessageBox(self.handle,pchar('导出Excel文件:' + FileName + '完毕!'),
'导出成功',MB_OK+MB_ICONINFORMATION+MB_TOPMOST)
end;


 
是呀,SERVER挺好,当然也有其它的控件 EHLIB
 
silent的方法不错,很快,但是字符串数据比如'00001'和'0001'都会被转存为'1',
如何处理?再加50分
 
最快的办法:
adoconnection1.Execute('select * into customer '+
'in "customer.xls" "excel 8.0;" from customer');
应该没有比这个还快的吧?
 
silent的方法ok了,但是需要给numberformatlocal属性为'@',才能保证转换完全正确,
unidragon的方法我这里没有调通。我后来说想再加50分,但好像系统不支持,不好意思了。
 
没关系,共同提高。
 

Similar threads

回复
0
查看
548
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部