用多线程将STRINGGRID中的数据导至EXCEL(100分)

  • 主题发起人 主题发起人 sonny_shenyimin
  • 开始时间 开始时间
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。
请各位大虾诊断一下。
谢谢。
 
附加功能 将问题提前
 
可以做到,你去买一张程序大本营2000荟萃版(极力推荐!)的CD2中,里面有一个控件名字叫做
Exporte.zip(自己用Win98的查找功能找一下,具体是在/vcl/database目录),
它可以将TTable 或TQuery中的数据倒入Excel,遗憾它倒出的数据不控制字段的
长度,这个控件我自己正在用,现在我没有空,以后有时间我会改改它。
看一下它的源代码,应该对你有启发。
 
我记得有人去年可能就是昨天,
有人问过这个问题我建议他用DXGRID/DXDBGRID或看看它的源码.
因为除非你的数据格式很单一如CHAR/NUMBER之类的,
否则很麻烦.
这位兄弟错误其实已经很明白了.
你既然能写出上面的代码查这样的错又有何难.
 
请继续或结束
 
多人接受答案了。
 

Similar threads

后退
顶部