我正在尝试将数据从delphi 7中的stringgrid导出到microsoft excel.我一直在用这个代码来做:
objExcel := TExcelApplication.Create(nil); objExcel.Visible[LOCALE_USER_DEFAULT] := true; objWB := objExcel.workbooks.add(null,LOCALE_USER_DEFAULT); lineNumber := 1; for i:=1 to stringgrid1.rowcount-1 do begin for j:=0 to stringgrid1.ColCount-1 do begin objWB.Worksheets.Application.Cells.Item[i+lineNumber,j+1] := ''''+stringgrid1.Cells[j,i]; end; end;
但是当数据很大时,需要很长时间才能完成.有没有其他更快的方法将数据从delphi 7 stringgrid导出到excel?
解决方法
最快的方法是使用Variant数组,并将整个数组传递给Excel:
uses OleAuto; var xls,wb,Range: OLEVariant; arrData: Variant; RowCount,ColCount,i,j: Integer; begin {create variant array where we'll copy our data} RowCount := StringGrid1.RowCount; ColCount := StringGrid1.ColCount; arrData := VarArrayCreate([1,RowCount,1,ColCount],varVariant); {fill array} for i := 1 to RowCount do for j := 1 to ColCount do arrData[i,j] := StringGrid1.Cells[j-1,i-1]; {initialize an instance of Excel} xls := CreateOLEObject('Excel.Application'); {create workbook} wb := xls.Workbooks.Add; {retrieve a range where data must be placed} Range := wb.WorkSheets[1].Range[wb.WorkSheets[1].Cells[1,1],wb.WorkSheets[1].Cells[RowCount,ColCount]]; {copy data from allocated variant array} Range.Value := arrData; {show Excel with our data} xls.Visible := True; end;