关于导出excel表的问题

xqmarine 2006-05-06 03:07:16
我在程序中打开一个excel表,然后往里面输入内容。最后存盘。然后我到文件所在目录打开那个文件

第一次能打开,多弄几次就会打不开。 后来我在进程管理器看到有几个进程 EXCEL.exe 。我关闭这些进程后,就能打开那个存盘的文件。 我想关于excel操作代码肯定有问题。 请帮忙看下?

代码:
try
ExcelApp := CreateOleObject('Excel.Application');
except
Application.MessageBox('你的机器里未安装Microsoft Excel.', '', 32);
Exit;
end;
WorkBook := ExcelApp.WorkBooks.add;

/////省略往sheet里写数据的代码。。。

ExcelApp.activesheet.saveAs(filename); //存盘 filename是文件路径名

ExcelApp.WorkBooks.Close;
ExcelApp.Quit;

这段代码哪里没有关闭打开的excel进程呀? 还是应该怎么写?
...全文
244 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hszj 2006-05-10
  • 打赏
  • 举报
回复
去下在Jungle的EjunExcelRW类库吧,不需要Excel直接读写xls文件。 http://www.e-jun.com/bbs
Elmer728 2006-05-09
  • 打赏
  • 举报
回复
我碰到过这个问题。就是这样解决的:
WorkBook:=unassigned;
ExcelApp:=unassigned;
Elmer728 2006-05-09
  • 打赏
  • 举报
回复
这样试试:
ExcelApp:=unassigned;
xqmarine 2006-05-08
  • 打赏
  • 举报
回复
up 谁帮忙解决呀?
over_the_hill 2006-05-07
  • 打赏
  • 举报
回复
是建sheet的问题 以前也遇到过
xqmarine 2006-05-07
  • 打赏
  • 举报
回复
disconnect 不行呀, 提示自动对象没这个方法 的错误!

我不是用delphi的excel控件。用 oleobject也有这个方法吗?

楼上的遇到过,麻烦说下怎样解决的啊?
wudi_1982 2006-05-06
  • 打赏
  • 举报
回复
procedure TForm1.Button10Click(Sender: TObject);
var
Temp_Worksheet: _WorkSheet;
i,j,m ,sa,xa,sj,xj: integer;
begin
ExcelApplication1.Connect;
ExcelApplication1.Visible[0] := false;
if CheckBox1.Checked then
ExcelApplication1.Caption := '百分比数据'
else
ExcelApplication1.Caption := '索力数据数据';


ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
Temp_Worksheet:=ExcelWorkbook1.WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
ExcelWorksheet1.Name := 'moumou';
//数据录入代码

ExcelWorksheet1.SaveAs(ed_name.Text);



ExcelWorkbook1.Close;
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;
showmessage('数据导出完毕');


这是精简之后的
wudi_1982 2006-05-06
  • 打赏
  • 举报
回复
procedure TForm1.Button10Click(Sender: TObject);
var
Temp_Worksheet: _WorkSheet;
i,j,m ,sa,xa,sj,xj: integer;
begin
ExcelApplication1.Connect;
ExcelApplication1.Visible[0] := false;
if CheckBox1.Checked then
ExcelApplication1.Caption := '百分比数据'
else
ExcelApplication1.Caption := '索力数据数据';


ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
Temp_Worksheet:=ExcelWorkbook1.WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
ExcelWorksheet1.Name := 'moumou';

ExcelApplication1.Columns.ColumnWidth := 12;

ExcelApplication1.Cells.Item[1,1] := '索号';
ExcelApplication1.Cells.Item[1,2] := '下游江';
ExcelApplication1.Cells.Item[1,3] := '上游江';
ExcelApplication1.Cells.Item[1,4] := '索号';
ExcelApplication1.Cells.Item[1,5] := '上游岸';
ExcelApplication1.Cells.Item[1,6] := '下游岸';
if not CheckBox1.Checked then
ExcelApplication1.Cells.Item[1,8] := '空传感器';
j := 1;
i := 2;
sa := 2;
xa := 2;
sj :=2;
xj := 2;

ADOQuery3.Close;
ADOQuery3.Open;

while not ADOQuery3.Eof do
begin
if ADOQuery3.FieldByName('qy').Value='下游江' then
begin

ExcelApplication1.Cells.Item[xj,2].value := ADOQuery3.FieldByName('sl').Value;
inc(xj);
end
else if ADOQuery3.FieldByName('qy').Value='上游江' then
begin
ExcelApplication1.Cells.Item[sj,3].value := ADOQuery3.FieldByName('sl').Value;
inc(sj);
end
else if ADOQuery3.FieldByName('qy').Value='上游岸' then
begin
ExcelApplication1.Cells.Item[sa,5].value := ADOQuery3.FieldByName('sl').Value;
inc(sa);
end
else if ADOQuery3.FieldByName('qy').Value='下游岸' then
begin
ExcelApplication1.Cells.Item[xa,6].value := ADOQuery3.FieldByName('sl').Value;
inc(xa);
end
else begin
if not CheckBox1.Checked then
begin
ExcelApplication1.Cells.Item[i,8].value := ADOQuery3.FieldByName('sl').Value;
inc(i);
end;
end;
ADOQuery3.Next;

end;

for i:=2 to 42 do
begin
ExcelApplication1.Cells.Item[i,1] := inttostr(i-2);
ExcelApplication1.Cells.Item[i,4] := inttostr(i-2);
end;

ExcelWorksheet1.SaveAs(ed_name.Text);



ExcelWorkbook1.Close;
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;
showmessage('数据导出完毕');

end;
hsmserver 2006-05-06
  • 打赏
  • 举报
回复
ExcelApp.Disconnect;试试
具体内容请参考我的BLOG:http://blog.csdn.net/smallwhiteyt/archive/2009/11/08/4784771.aspx 如果你耐心仔细看完本文,相信以后再遇到导出EXCLE操作的时候你会很顺手觉得SO EASY,主要给新手朋友们看的,老鸟可以直接飘过了,花了一晚上的时间写的很辛苦,如果觉得对你有帮助烦请留言支持一下,我会写更多基础的原创内容来回报大家。 C#导出数据到EXCEL格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,希望大家一起探讨,如有不对的地方还请大家多多包涵并指出来,我也是个新手,出错也是难免的。 首先先总结下自己知道的导出EXCEL格的方法,大致有以下几种,有疏漏的请大家补充。 1.数据逐条逐条的写入EXCEL 2.通过OLEDB把EXCEL做为数据源来写 3.通过RANGE范围写入多行多列内存数据到EXCEL 4.利用系统剪贴板写入EXCEL 好了,我想这些方法已经足够完成我们要实现的功能了,方法不在多,在精,不是么?以上4中方法都可以实现导出EXCEL,方法1为最基础的方法,意思就是效率可能不是太高,当遇到数据量过大时所要付出的时间也是巨大的,后面3种方法都是第一种的衍生,在第一种方法效率低下的基础上改进的,这里主要就是一个效率问题了,当然如果你数据量都很小,我想4种方法就代码量和复杂程度来说第1种基本方法就可以了,或当你的硬件非常牛逼了,那再差的方法也可以高效的完成也没有探讨的实际意义了,呵呵说远了,本文主要是在不考虑硬件或同等硬件条件下单从软件角度出发探讨较好的解决方案。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧