将数据以最快的方式发布到EXCEL中(100分)

  • 主题发起人 主题发起人 liaotw
  • 开始时间 开始时间
L

liaotw

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位大侠:
我在使用DELPHI的过程中,有时因需要,将DBGRID中的数据导出到EXCEL中,
我用的方法是首先将数据复制到粘贴板上,然后声明一个VARIANT变量(excelapplication),
实现一个EXCEL应用,非常奇怪的是,对于在EXCEL中,对各个CELLS[I,J]可以进行COPY操
作,却无法进行PASTE操作。不知怎么样才能将粘贴板上的数据粘贴到EXCEL中。
此时在程序打开的EXCEL应用中,按CTRL+V键,可以实现粘贴功能,但是,对于各
个CELL中的数据,当全为数字时,EXCEL将它作为整数或者实数进行处理。导致如物料代码
等信息如:“0000256”的信息变成了“256”,怪模怪样。(此方法进行数据的导出,那好象
是最快的了。)
此两个问题,我想了很旧都没有得到解决。希望有人能给我一个满意的答案。我的代码如下:
var
excelapp,sheet,columnrange:variant;
i,j,k,m:integer;
str:string;
begin
if not(jgj.Active) then
begin
exit;
end;
try
screen.cursor:=crhourglass;
jgj.DisableControls;
//将数据复制到粘贴板
str:='';
j:=jgj.fieldcount-1;
k:=jgj.RecordCount;
for i:=0 to j do
str:=str+jgj.fields.fieldname+char(9);
str:=str+char(13);
jgj.First;
while not(jgj.eof) do
begin
for i:=0 to j do
str:=str+jgj.Fields.AsString+char(9);
str:=str+char(13);
jgj.next;
end;
clipboard.Clear;
clipboard.Open;
clipboard.astext:=str;
clipboard.Close; //数据已经到了粘贴板
//将数据转移到EXCEL文件当中。
excelapp:=createoleobject('excel.application');
excelapp.visible:=true;
excelapp.workbooks.add(-4167);
sheet:=excelapp.workbooks[1].worksheets[1];
sheet.name:='DeLight_Data';
sheet.cells[1,1].paste; //此句出错!!!!!
 
>>>sheet.cells[1,1].paste; //此句出错!!!!!
这句不出错就鬼了,因为 Cells 属性返回的是一个 Range 对象,根本没有你自认为有
的 Paste 方法,当然会出错。Vbaxl8.hlp 里有详细的说明:
Worksheet 对象:返回 Range 对象,该对象代表工作表中所有的单元格
(不仅是当前正在使用的单元格)。
你应该用 WorkSheet 对象的 Paste 方法,而不是 Cells 对象的,后者没这个方法:
sheet.name:='DeLight_Data';
sheet.paste; //应该这样,试试吧,我未测试
>>>当全为数字时,EXCEL将它作为整数或者实数进行处理。
>>>导致如物料代码等信息如:“0000256”的信息变成了“256”,怪模怪样
你把这几列作为文本,而不作数字进行显示就行了,Excel 默认的是数字方式
 
用Texdbgrid
可以不用Ole自动化
直接写xls文件
 
在您们回信前我已经搞定了,不过也非常感谢两位,一百大洋已经奉上。
我用此方法,速度快极了,建议以后使用此方法。比那见鬼的写EXCEL的CELLS快了
至少30倍!而且可以方便的调整格式。
 
To arm:
TextDbGrid 是第三方控件吧?哪里能找到?
 
:liaot, 你用的是什么方法?用了控件吗?用过TXLSWrite吗?我现在有个问题
不知用此控件怎么控制输出,把2行合并成1行。有消息告诉我
谢谢了。wangqiang@khtx.com
 
可以的话给我发一份,谢谢 huysa@263.net
 
To:Liaotw
Sorry!这也是我们常需用到的东东,可否将你的代码或控件E一份。
EMail:robin_f@sina.com
多谢!
 
Liaotw大哥,小弟也碰巧需要将数据导出到excel表中,不知可否发一份给小弟,先谢谢了。
shockjoy@163.net
 
Liaotw大哥,我也碰巧需要将数据导出到excel表中,不知可否发一份给小弟,先谢谢了。
puremoonstone@163.net
 
后退
顶部