关于delphi操作excel(150分)

  • 主题发起人 主题发起人 死神十三
  • 开始时间 开始时间

死神十三

Unregistered / Unconfirmed
GUEST, unregistred user!
用comobj方法,不欢迎excel控件
var xlapp : variant;
procedure TForm1.Button2Click(Sender: TObject);
begin
xlapp := createoleobject('excel.application');
xlapp.workbooks.open('c:/ss.xls');
xlapp.cells[1,1]:='aaaaa';
xlapp.workbooks.close;
xlapp.quit;
end
以上是一个打开excel写数据的程式,没有什么问题
但是如果将以上程式分成两个部分
procedure TForm1.Button2Click(Sender: TObject);
begin
xlapp := createoleobject('excel.application');
xlapp.workbooks.open('c:/ss.xls');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
xlapp.cells[1,1]:='aaaaa';
xlapp.workbooks.close;
xlapp.quit;
end;
进程里会多出一个excel.exe的进程
我的问题是如何在分两步运行操作excel(第一步打开excel,选择工作表,第二步是修改数据,保存关闭),而且目标excel只打开一次的情况下(系统配置低,打开一次要延时10秒),让excel正常关闭。
注:1、excel进程不能强制关闭,否则会导致excel再次打开发生异常
2、尽量不使用excel自带宏
3、很奇怪,家里的双核处理器1G内存运行没这些问题,换了机子怎么就有问题了
 
你的代码是对的。
你跟踪这段看看,
procedure TForm1.Button2Click(Sender: TObject);
begin
xlapp := createoleobject('excel.application');
xlapp.workbooks.open('c:/ss.xls');
end;
不会多进入了一次吧?
 
我跟你的一样啊,程序看起来没问题,除非你再点Button2了
 
嗯,看起来是没有什么问题.我差不多也是这样做的,在赛扬600、128M内存下跑过,没有什么问题.
 
應該沒什麼問題吧,我試過
 
没什么问题啊..无非是open/close吗
 
xlapp.quit;
xlapp := Unassigned;
 
代码理论上是没有问题
但是依次TForm1.Button2Click,TForm1.Button3Click进程就多个excel。exe
这个就表示你无法打开excel文件,就算打开,也就看到一个excel标题,内容位置全是桌面
p1.5 128mb,p2.8 256mb,p3.0,512mb三台机子都无法正常关闭excel
 
仔细看你的代码发现一个问题.
你修改了cell,退出excel时系统会提示你是否保存。你加上这一句试试。
procedure TForm1.Button3Click(Sender: TObject);
begin
xlapp.cells[1,1]:='aaaaa';
xlapp.workbooks.Saved:=true;//!!!!!!!!!
xlapp.workbooks.close;
xlapp.quit;
end;
 
to zywcd,程序运行时说方法save not support
 
xlapp.workbooks.SaveAs(fileName)
 
应该这样。
xlapp.ActiveWorkBook.saved:=true;
xlapp.workbooks.close;
xlapp.quit;
 
xlapp.ActiveWorkBook.saved:=true;好像是不保存
xlapp.ActiveWorkBook.saved:=false好像可以,但是会跳出个对话框,问你要不要保存,怎么连这个也不出现?
 
你需要保存吗?你的excel没有退出就是因为这个。但是不明白你为什么不弹出提示框。
 
就是自动保存,不要再选yes,有点多此一举
 
xlapp.workbooks.SaveAs(fileName)
 
这个问题还是没有解决
我决定还是换个电脑,反正高档配置的电脑没有这些问题
 
你把代码写在一个事件上当然没问题了,
把它们分开来成两个事件,主要问题还是出在 xlapp.quit;这句上边,
---------------------------------------
 
在一个事件里,你点一下按钮,代码一次性给你执行,最后 lapp.quit退出进程,
-----------------------
你分开了,除非你执行完第一个事件后,再执行第二个,就不会有错,
------------------------
如果单是执行第一个后再一次执行,因为xlapp.quit 没用上,所以出错。
---------
 
我就是执行完第一个事件后,再执行第二个的
 

Similar threads

I
回复
0
查看
781
import
I
I
回复
0
查看
847
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
610
import
I
后退
顶部