读取excel数据太慢,界面卡住,有什么方法防止呢?(100分)

N

No_Zero

Unregistered / Unconfirmed
GUEST, unregistred user!
数据大概有2W条左右,读取的时候好卡的感觉,花的时间也挺长,不知道什么方法可以提高效率,并防止界面呆住?

程序如下:
procedure TForm1.ck;
var
ep:variant;
c1,c2:integer;
begin
c1:=1;
ep:=createoleobject('excel.application');
ep.visible:=FALSE;
ep.caption:='EXCEL程序';
ep.workbooks.open('D:/My Documents/y6.xls');
showmessage('读取数据中……');

while ep.worksheets[3].Cells[c1,1].value<>'' do //查看数据有多少条
c1:=c1+1;

for c2:=2 to c1 do //循环读取数据到Tstringgrid中
begin
lb1.Cells[0,c2-1]:=inttostr(c2-1);
lb1.Cells[2,c2-1]:=ep.worksheets[3].cells[c2,2].value;
lb1.Cells[1,c2-1]:=ep.worksheets[3].cells[c2,1].value;
lb1.Cells[3,c2-1]:=ep.worksheets[3].cells[c2,3].value;
end;

ep.ActiveWorkBook.Save;
ep.workbooks.close;
ep.quit;
showmessage('数据读取完毕!');
end;
 
每读取10条就加入这句:Application.ProcessMessages;
 
简单的:
while ep.worksheets[3].Cells[c1,1].value<>'' do //查看数据有多少条
c1:=c1+1;

for c2:=2 to c1 do //循环读取数据到Tstringgrid中
begin
lb1.Cells[0,c2-1]:=inttostr(c2-1);
lb1.Cells[2,c2-1]:=ep.worksheets[3].cells[c2,2].value;
lb1.Cells[1,c2-1]:=ep.worksheets[3].cells[c2,1].value;
lb1.Cells[3,c2-1]:=ep.worksheets[3].cells[c2,3].value;
application.ProcessMessages;
end;
 
用ado中的sql读
 
楼上的方法正解,将excel理解为数据库,使用ado连接。ado支持excel数据库。
不然不会太快。
 
用多线程
 
用 xlsreadwrite 绝对高效!
 
Application.ProcessMessages;
防呆住
速度快用多线程
推荐用ADO
 
多人接受答案了。
 
顶部