忘了贴问题了,上面的代码执行后,Excel进程释放不掉!!!
解决方案 »
- 请问TMethod = procedure of object是什么意思
- 求天心企业全能管理系统的问题.
- MDI模式下的子窗体要怎么定义里面的变量。
- 加入图片为什么不行
- COBRA OBJECT 为何我无处新建!
- 在RBuilder的报表设计控件中,怎样能把“Chart、DBChart”加到工具栏上?
- 一个关于空记录的的问题!
- 用realaudio写的播放器如何实现双击全屏和拖拽播放??
- 有谁知道SQLServer2000与IBM AS400连接问题??
- delphi中,为什么dbgrid不能显示memo字段里的内容.
- 非delphi高手恐怕解决不了(请高手指教)-----400分
- 在用printer打印时,如何得到一个字段中内容的长度(物理长度),如果长度大于表格,则改变字体?????????
WorkBook1, WorkBook2: Variant;
中的‘Variant’改成‘OLEVariant’试试
并在uses 中添加COMOBJ
if not VarISEmpty(Excel) then
try
Excel.Quit;
finally
Excel.DisConnect;
end;
Excel := Unassigned;
end
我用的是Variant不支持 DisConnect 方法!!!
的进程,如有直接的解决方法,请大虾们不吝告知!!!谢谢!!!解决办法如下://杀死Excel的进程的函数(感谢这位朋友,我没记住他的ID,抱歉)
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 TfmMain.BitBtn1Click(Sender: TObject);
var
WorkBook1, WorkBook2: OLEVariant;
begin
try
Excel := Unassigned;
Excel := CreateOleObject('Excel.Application'); //打开文件1
Excel.WorkBooks.Open(fe2000.Text);
WorkBook1 := Excel.ActiveWorkBook;
WorkBook1.Close; //打开文件2
Excel.WorkBooks.Open(fe2001.Text);
WorkBook2 := Excel.ActiveWorkBook;
WorkBook2.Close;
finally
if not VarISEmpty(Excel) then
Excel.Quit;
Excel := Unassigned;
TerminateOLE; //加到这里
end;end;
执行之后,发现Excel的进程没有了,也可以打开Excel文件了!!!
我发现这个问题在各个论坛上都有,但只有一个哥们将答案贴出来了,
很多都说“谢谢,我知道答案了,请斑竹结束这个帖子吧”,我希望
如果某位大虾提的问题自己解决了,请将答案也贴出来,这样也给别的
难兄难弟提供方便,希望得到大家的响应!!!