为何EXCEL不能真正关闭?(100分)(100分)

  • 主题发起人 xianrenzhang
  • 开始时间
X

xianrenzhang

Unregistered / Unconfirmed
GUEST, unregistred user!
我用SERVER控件操作Excel,在退出时我发现Excel并没有在内存中关闭(我的OS是SERVER2000),
只有当我把程序也关闭的时候Excel才被真正释放。
我的关闭语句:
......
Excelworkbook1.Save;
ExcelApplication1.Workbooks.Close;
Excelapplication1.Quit;
ExcelApplication1.Disconnect;
请问是什么原因?
 
freeandnil()
 
TO:我写了 还是不行啊?
 
贴 关闭Excel.

Try

ExcelApplication1.Quit;

ExcelWorksheet1.Disconnect;

ExcelWorkbook1.Disconnect;

ExcelApplication1.Disconnect;

Except

End;
这个可以杀死进程
procedure TerminateOLE;
var
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
Ret : BOOL;
ProcessID : integer;
s:string;
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
while Ret do
begin
s:=ExtractFileName(FProcessEntry32.szExeFile);
if s='EXCEL.EXE' then
begin
ProcessID:=FProcessEntry32.th32ProcessID;
TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,ProcessID),1);
s:='';
end;
Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;
 
//加载
procedure TForm1.Button1Click(Sender: TObject);
begin
ExcelApplication1.Connect;
end;
//杀死它^_^
procedure TForm1.Button2Click(Sender: TObject);
begin
ExcelApplication1.Quit;
ExcelApplication1.Destroy;//重要
end;
 
好象是要加入
ExcelApplication1.Destroy; 还是
ExcelApplication1.Free;

忘记了
 
感谢各位,我对以上方法进行了实际测试,认为sunnie兄二次所贴为完整解决方案,100个小钱
请笑衲!(我的感受如下)
如果只是使用
ExcelApplication1.Quit;
ExcelApplication1.Destroy;
不能解决问题,而且再此调用时会产生读地址错误;
必须调用各个曾经使用的Excel控件的Disconnect,缺一不可(我的问题就在这里啊)。
另ExcelApplication1.Free;好想应该用在使用直接创建的OLE对象中。
 
顶部