现在的位置: 首页 > 综合 > 正文

delphi 导出成excel(这个方法速度比较慢,不过可以方便的设置属性)

2012年04月25日 ⁄ 综合 ⁄ 共 1213字 ⁄ 字号 评论关闭
 实现的效果就是将dbgrideh中的数据导出到excel刚开始用creatoleobject速奇慢(记得 use comobj);

导出几个记录看不出什么,当数据有千条以上,要十多分钟!汗。优化好几次效果也不明显!
   代码如下:
  function TForm_Bc.export_xls(xls_name: string): string;
  var
     xls,sheet1:variant;
     i,j:integer;
begin
   j:=2;
   SaveDialog1.FileName:=xls_name+'_'+FormatDatetime('YYYY-MM-DD',now);
   SaveDialog1.filter:='Excel文件(*.xls)|*.xls';
   if not SaveDialog1.Execute then exit;
   try
     xLS:=createoleobject('excel.application');
     SHEET1:=createOleobject('excel.sheet');
   except
     showmessage('启动EXCEL失败,可能原因是由于您的机器未安装EXCEL');
     exit;
   end;
   xls.visible:=false;
   sheet1:=xls.workbooks.add;
   try
   for i:=0 to DBGridEh1.Columns.count-1 do
   sheet1.worksheets[1].cells[1,i+1].value:=DBGridEh1.Columns[i].title.caption;
   with datamodule1.Query_ML do
   begin
     first;
     while Not eof do
     begin
       for i:=0 to fieldcount-1 do
       begin
       sheet1.worksheets[1].cells[j,i+1].value:=Fields[i].AsString;
       end;
       inc(J);
       next;
     end;
   end;
   except
     showmessage('导出数据失败!');
   end;
   try
     sheet1.saveas(savedialog1.filename);
     sheet1.close;
     xls.quit;
   except
     sheet1.close;
     xls.quit;
   end;
   xls:=Unassigned; sheet1:=Unassigned;
end;
这种方法的好处是可以对EXCEL的每个单元格进行操作,但是数据量大的时候太慢。分析了许久可能的原因是由于这种方法需要启动EXCEL并对每个单元格操作,所以才这样!

抱歉!评论已关闭.