S
sonny_shenyimin
Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾,
我在将STRINGGRID中的数据导至EXCEL中时(在D5中使用Servers页的相关控件),
使用两重循环将一个一个CELL的数据导出到相应的位置。发现这种方法特慢,就做
了个多线程,主要的代码段如下:
constructor fillAColumn.create(Suspended:boolean;Source: TStringGrid;AExcelApplication : TExcelApplication;
AExcelWorkBook: TExcelWorkBook;Destination: TExcelWorkSheet;
Column: integer);
begin
inherited Create(Suspended);
FExcelApplication := AExcelApplication;
FExcelWorkBook := aExcelWorkBook;
FDestination := Destination;
FSource := Source;
FColumn := Column;
FreeOnTerminate := true;
end;
procedure fillAColumn.Execute;
var
i: integer;
begin
{ Place thread code here }
for i:= 0 to FSource.RowCount - 1do
begin
FDestination.Cells.NumberFormatLocal := '@';
FDestination.Cells.Item[i+1,FColumn+1] :=
FSource.Cells[FColumn,i];
end;
end;
运行时冒错:OLEException: 尚未调用coInitialize。
请各位大虾诊断一下。
谢谢。
我在将STRINGGRID中的数据导至EXCEL中时(在D5中使用Servers页的相关控件),
使用两重循环将一个一个CELL的数据导出到相应的位置。发现这种方法特慢,就做
了个多线程,主要的代码段如下:
constructor fillAColumn.create(Suspended:boolean;Source: TStringGrid;AExcelApplication : TExcelApplication;
AExcelWorkBook: TExcelWorkBook;Destination: TExcelWorkSheet;
Column: integer);
begin
inherited Create(Suspended);
FExcelApplication := AExcelApplication;
FExcelWorkBook := aExcelWorkBook;
FDestination := Destination;
FSource := Source;
FColumn := Column;
FreeOnTerminate := true;
end;
procedure fillAColumn.Execute;
var
i: integer;
begin
{ Place thread code here }
for i:= 0 to FSource.RowCount - 1do
begin
FDestination.Cells.NumberFormatLocal := '@';
FDestination.Cells.Item[i+1,FColumn+1] :=
FSource.Cells[FColumn,i];
end;
end;
运行时冒错:OLEException: 尚未调用coInitialize。
请各位大虾诊断一下。
谢谢。