很怪的现象-Excel问题,神仙救命!!! to WWWWA(aaaa) 哥们!先谢谢你! 但Excel.disconnect是用Server控件中的方法,不是Variant类型的方 法,程序报错,“该方法不被支持” 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我发现方法了,在大富翁上查的,不是正途,但可以解决问题,原理是杀死Excel的进程,如有直接的解决方法,请大虾们不吝告知!!!谢谢!!!解决办法如下://杀死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文件了!!!我发现这个问题在各个论坛上都有,但只有一个哥们将答案贴出来了,很多都说“谢谢,我知道答案了,请斑竹结束这个帖子吧”,我希望如果某位大虾提的问题自己解决了,请将答案也贴出来,这样也给别的难兄难弟提供方便,希望得到大家的响应!!! 我估计不是你代码有问题,而是1、你打开的Excel文件可能包含宏什么别的导致弹出对话框了。2、或是你用了WorkBook修改后关闭时候弹出提示保存的对话框了。你可以用Excel.visible := True来看看是怎么回事对于1没有什么好办法,对于2,你可以用WorkBook1.Close(False)来试试。 校验文件SHA1值的单元或者算法 我学习软件开发到现在还没设置过断点,问题是不是很严重!! 想跳槽的请进 显示文字为对象 ■■■■■ 香烟与爱情--散分系列二 ■■■■■ 怎样调整TTreeView控件中每个节点DisplayRect(false)区域的高度? 请问有DXF转其他格式的控件吗?散分 wIN2000 SEVER服务器上运行会出现这样的错误提示???在线 在线等待!在DELPHI中如何调用*.EXE文件.马上给分! 紧急求救 60多万条的纪录Access数据库可以瞬间打开,而我用ADO需要几分钟,问什么? 谢谢刚才的指点,继续请教函数调用,在线等待....
的进程,如有直接的解决方法,请大虾们不吝告知!!!谢谢!!!解决办法如下://杀死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文件了!!!
我发现这个问题在各个论坛上都有,但只有一个哥们将答案贴出来了,
很多都说“谢谢,我知道答案了,请斑竹结束这个帖子吧”,我希望
如果某位大虾提的问题自己解决了,请将答案也贴出来,这样也给别的
难兄难弟提供方便,希望得到大家的响应!!!
1、你打开的Excel文件可能包含宏什么别的导致弹出对话框了。
2、或是你用了WorkBook修改后关闭时候弹出提示保存的对话框了。你可以用Excel.visible := True来看看是怎么回事
对于1没有什么好办法,对于2,你可以用WorkBook1.Close(False)来试试。