php导出excel速度慢,把ADOQuery中的数据导出到EXCEL中太慢,差不多平均一秒多钟导一条记录,怎么才能提高速度 ?(100分)...

程序: 表字段比较多, 50多个字段 。

var

xlsapp,xlssheet:variant;

xlsfilename,xlsfiletitle,xlsfiledate:string;

i,j:integer;

Savedialog1 :TSaveDialog;

BookMark1:TBookMark ;

begin

SaveDialog1 :=TSaveDialog.create(Application);

SaveDialog1.Filter := 'Excel文件(*.xls)|*.XLS';

if savedialog1.Execute then

if savedialog1.FileName <>'' then

begin

xlsfilename := savedialog1.FileName ;

xlsfiletitle:='考勤汇总' ;

try

xlsapp:=createoleobject('excel.application');

xlssheet:=createoleobject('excel.sheet');

except

showmessage('本机没有安装Microsoft excel!');

savedialog1.Free ;

exit;

end;

Panel1.BringToFront ;

ProgressBar1.Min :=0 ;

ProgressBar1.Max :=ADOQuery.RecordCount ;

ProgressBar1.Position:=0 ;

Label7.Caption :='正在导出数据到'+xlsfilename ;

BookMark1:=ADOQuery.GetBookmark ;

ADOQuery.DisableControls ;

Application.ProcessMessages ;

Panel1.Refresh ;

Screen.Cursor :=crHourGlass ;

try

xlssheet:=xlsapp.workbooks.add;

ADOQuery.First;

// Label7.Caption :='正在'

for j := 0 to wwDBGrid1.Selected.Count-1 do

begin

xlsapp.Cells.item[1, j + 1].NumberFormatLocal :='@';

xlsapp.Cells.item[1, j + 1] := wwDBGrid1.Columns[J].DisplayLabel ;

xlsapp.Cells.item[1, j + 1].font.size := '10';

end;

for i := 2 to ADOQuery.RecordCount + 1 do

begin

for j := 0 to wwDBGrid1.Selected.Count-1 do

begin

case ADOQuery.FieldByName(wwDBGRid1.Columns[J].FieldName).DataType of

ftFloat, ftCurrency, ftBCD

: xlsapp.Cells.item[i, j + 1].NumberFormat := '0.00';

else xlsapp.Cells.item[i, j + 1].NumberFormatLocal :='@';

end;

xlsapp.Cells.item[i, j + 1] :=ADOQuery.FieldByName(wwDBGRid1.Columns[J].FieldName).AsString ;

xlsapp.Cells.item[i, j + 1].font.size := '10';

end;

ADOQuery.Next;

ProgressBar1.Position:=I-1 ;

Application.ProcessMessages ;

end;

xlsapp.Columns.AutoFit;

xlssheet.saveas(xlsfilename);

xlssheet.close;

xlsapp.quit;

xlsapp:=unassigned;

showmessage('数据已保存为: '+xlsfilename);

except

showmessage('数据转换出错!');

Panel1.SendToBack ;

xlssheet.close;

xlsapp.quit;

xlsapp:=unassigned;

end;

SaveDialog1.Free ;

Panel1.SendToBack ;

ADOQuery.EnableControls ;

ADOQuery.GotoBookmark(BookMark1) ;

ADOQuery.FreeBookmark(BookMark1) ;

end;

Screen.Cursor :=crDefault ;

我测试了导出20条记录 , 要用24秒钟,

一般汇总表记录在2500条左右,如果全导出的话估计要一个小时左右。岂不是要死人

如果去掉

case ADOQuery.FieldByName(wwDBGRid1.Columns[J].FieldName).DataType of

ftFloat, ftCurrency, ftBCD

: xlsapp.Cells.item[i, j + 1].NumberFormat := '0.00';

else xlsapp.Cells.item[i, j + 1].NumberFormatLocal :='@';

end ;

这格式化数据的代码,速度稍快点, 多一秒一条。

能不能一下子格式化EXCEL的一整列 ? 不用格式化每个单元格

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值