二十年以后的家乡450字:用delphi 操作excel如何提速

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/05 02:45:35
我采用OLE操作EXCEL,但是速度太慢了,我导入一个3万多条数据的文件居然要50分钟,我这是3GHz的cpu阿,下面是我的代码,我已经屏蔽掉插入数据库的动作了,只是读取的动作仍然要将近半小时

try
ExcelApp:=CreateOleObject('Excel.application'); //打开EXCEL
ExcelApp.Workbooks.Open(OpenDialog1.FileName);
try
ExcelApp.Worksheets['刷卡记录'].Activate;
except
showmessage('请确认此文件中是否存在“刷卡记录”工作表');
exit;
end;
sheet:=ExcelApp.activesheet;
for i:=2 to sheet.usedRange.rows.count do
begin
//导入考勤数据
try
ARExlRcv.emp_id:=sheet.cells[i,1].value;
if (ARExlRcv.emp_id[1] in ['0'..'9']) and (length(ARExlRcv.emp_id)<6) then
ARExlRcv.emp_id:='0'+ARExlRcv.emp_id;
ARExlRcv.emp_name:=sheet.cells[i,2].value;
if string(sheet.cells[i,3].value)<>'' then
ARExlRcv.kq_date:=DMfunc.trans_date(sheet.cells[i,3].value);
ARExlRcv.date_class:=sheet.cells[i,4].value;
ARExlRcv.in_time1:=sheet.cells[i,5].value;
if ARExlRcv.in_time1='' then ARExlRcv.in_time1:='0';
ARExlRcv.out_time1:=sheet.cells[i,6].value;
if ARExlRcv.out_time1='' then ARExlRcv.out_time1:='0';
ARExlRcv.in_time2:=sheet.cells[i,7].value;
if ARExlRcv.in_time2='' then ARExlRcv.in_time2:='0';
ARExlRcv.out_time2:=sheet.cells[i,8].value;
if ARExlRcv.out_time2='' then ARExlRcv.out_time2:='0';
ARExlRcv.shift_cod:=sheet.cells[i,9].value;
ARExlRcv.ovr_class1:=sheet.cells[i,10].value;
ARExlRcv.ovr_time1:=sheet.cells[i,11].value;
ARExlRcv.ovr_class2:=sheet.cells[i,12].value;
ARExlRcv.ovr_time2:=sheet.cells[i,13].value;
ARExlRcv.lev_class1:=sheet.cells[i,14].value;
ARExlRcv.lev_time1:=sheet.cells[i,15].value;
ARExlRcv.lev_class2:=sheet.cells[i,16].value;
ARExlRcv.lev_time2:=sheet.cells[i,17].value;
//DmExrcv.kq_add(ARExlRcv); //加入数据库
pr1.Position:=round((i/sheet.usedRange.rows.count)*100);
except
showmessage('第'+inttostr(i)+'行数据错误');
end;
end;
finally
ExcelApp.Workbooks.Free;
ExcelApp.quit;
end;

这样泛的问题,建议找一些Delphi书系统的看一下,即使别人告诉了你这个答案,也未必对你能有多少帮助。

你说呢?