快速加载Excel电子表格的方法

我使用此代码来加载只包含数字的Excel电子表格。 但是将整个文件加载到一个stringgrid需要很长的stringgrid ,任何人都知道一个更快的方法来做到这一点?

 procedure sh1(SheetIndex:integer); Var Xlapp1, Sheet:Variant ; MaxRow, MaxCol,X, Y:integer ; str:string; begin Str:=trim(form2.OpenDialog1.FileName); XLApp1 := createoleobject('excel.application'); XLApp1.Workbooks.open(Str) ; Sheet := XLApp1.WorkSheets[SheetIndex] ; MaxRow := Sheet.Usedrange.EntireRow.count ; MaxCol := sheet.Usedrange.EntireColumn.count; form2.stringgrid1.RowCount:=maxRow+1; form2.StringGrid1.ColCount:=maxCol+1; for x:=1 to maxCol do for y:=1 to maxRow do form2.stringgrid1.Cells[x,y]:=sheet.cells.item[y,x].value; XLApp1.Workbooks.close; end; procedure TForm2.Button1Click(Sender: TObject); begin if opendialog1.Execute then begin stringgrid1.Visible:=true; sh1(1); end; end; 

您可以尝试将整个范围复制到一个变体数组。 就像是

 procedure sh1(SheetIndex:integer); Var Xlapp1, Sheet:Variant ; MaxRow, MaxCol,X, Y:integer ; str:string; arrData:Variant; begin Str:=trim(form1.OpenDialog1.FileName); XLApp1 := createoleobject('excel.application'); XLApp1.Workbooks.open(Str) ; Sheet := XLApp1.WorkSheets[SheetIndex] ; MaxRow := Sheet.Usedrange.EntireRow.count ; MaxCol := sheet.Usedrange.EntireColumn.count; //read the used range to a variant array arrData:= Sheet.UsedRange.Value; form1.stringgrid1.RowCount:=maxRow+1; form1.StringGrid1.ColCount:=maxCol+1; for x:=1 to maxCol do for y:=1 to maxRow do //copy data to grid form1.stringgrid1.Cells[x,y]:=arrData[y, x]; // do note that the indices are reversed (y, x) XLApp1.Workbooks.close; end;