如何释放excel(50分)

  • 主题发起人 主题发起人 silverbird
  • 开始时间 开始时间
S

silverbird

Unregistered / Unconfirmed
GUEST, unregistred user!
我通过excelapplication控件调用excel,关闭程序后被调用的excel文件无法
打开(只能用程序打开),我在程序结束的地方写了如下代码:
myexcel.application.quit;
myexcel:=unassigned;
excelapplication1.Disconnect;
excelapplication1.Quit;
仍然不行,高手请指教!
 
excelapplication.free!!
 
可以呀,我是这样做的

msexcel.quit; //窗口关闭时,释放Excel对象,关闭Excel
msexcel:= Unassigned;
 
在excelapplication控件的onwindowsdsinactive(大概是这样)事件上添加
释放代码就可以解决这个问题。
 
我遇到过类似的情况,是因为在调试过程中创建了Excel对象后终止程序运行而没有释放造成的
类似于
msexcel.createoleobject('excel.application');
......
/////终止运行如执行exit;
......
if not varisempty(msexcel) then
begin
v.qiut;//没有执行过
v := unassigned;
end;

可能是这个原因,你可以试试在出现问题时,按ctrl+alt+del看看有没有正在运行的 excel
进程,把它全部杀掉就没问题了
 
萧月禾的说法很对的.
再,是不是第一次打开有问题,第二次就没问题了?我在做时也有这样的问题,我估计
是microsoft的bug,没辙。呵呵
 
execlapplication.quit;
excelapplication.disconnect;
 
我用COMObj生成的Excel直接調用ExeclApplication.Quit就釋放了,好像沒有unassigned,
free,disconnect等方法。
一個重要的問題,我現在只能用COMObj來寫ole程式,不能用Server的組件來寫,比如開啓
Excel文件時,總是提示參數不足。請給一個用Server Component的實際案例來看看,例如
open一個Word,Excel文檔之類的。我的程式設計環境是(Delphi6+Windows2000Server)。
謝謝了。
 
我是这样写的,但执行了quit,unassigned后,excel在任务管理器中仍然存在。渴望帮助

ExcelApp:=CreateOleObject('Excel.Application');
MyWorkBook:=CreateOleobject('Excel.Sheet');
MyworkBook:= ExcelApp.workBooks.Open(memo1.Lines.Strings[0]);//从memo中读取excel路径
rows:=MyWorkBook.WorkSheets[1].UsedRange.Rows.Count;
columns:=MyWorkBook.WorkSheets[1].UsedRange.columns.Count;ExcelApp.quit;
ExcelApp:=Unassigned; //释放VARIANT变量

我想统计多个excel文件(excel格式一致)中各单元格之和,但打开第一个文件后就无
法释放excel
 
myexcel.quit就可以。
 
这不是没有释放的问题,其实数据已经保存到excel中了,也释放了,
你把那个程序关闭了之后在打开看一下还有没有这种情况
 
你在ExcelApp:=Unassigned; //释放VARIANT变量
中仅仅释放了varinat变量本身,并没有释放excel,
要关闭excel,ExcelApp.quit可以
 
内存中去查找,找到就Kill掉
var
HwndCalculator : HWnd;
begin
TempExcelFile := ExTractFileName(UserExcelFileName);
HwndCalculator := Winprocs.FindWindow(nil,Pchar('Microsoft Excel - ' + TempExcelFile));
if HwndCalculator <> 0 then
SendMessage(HwndCalculator,WM_CLOSE,0,0);
end;
 
后退
顶部