var
    SourceExcel,wsheet:variant;
    SourceFileName:string;
begin...    SourceExcel:=CreateOleObject('Excel.Application');
    SourceExcel.WorkBooks.Open(SourceFileName);
    SourceExcel.WorkSheets[1].Activate;
    WSheet := SourceExcel.ActiveSheet;
    SourceExcel.visible:=true;
    ...
    SourceExcel.Workbooks.Close;
    SourceExcel.Quit;
    SourceExcel:=unassigned;
...    运行后,打开的excel窗口被关掉了,但是后台的excel.exe的进程仍在,但是当我关闭怎个delphi程序时,这些excel进程全部没了,郁闷啊,请教各位如何彻底关闭excel啊!

解决方案 »

  1.   

    紧急啊,大家救命,看了无数关于EXCEL控制的文章了,郁闷
    说明一下,这里SourceExcel被我设成了一个全局变量,不是像我上面写的那样是个临时变量
    不知道是不是这个原因,我还没有测试过
      

  2.   

    果然是这个原因,如果是局部变量的话,用    
    SourceExcel.Workbooks.Close;
    SourceExcel.Quit;
    就可以完全退出了,不知道为什么全局变量就会残留一个excel进程
      

  3.   

    楼主:好象不是这样,我定义了全局变量照样可以完全关闭后台进程! 
    if not VarIsEmpty(Fexcel) then
             Fexcel.application.quit;
             Fexcel := unassigned;
      

  4.   

    cyblueboy83(爱情白痴—电脑迷) :
    我这边不行啊,用了你的方法,内存里还是驻留了excel.exe的进程
      

  5.   

    var ExeHandle:Thandle;
    begin
     //获得句柄
     ExeHandle:=FindWindow('XLMAIN',nil);//'');//返回句柄
     //关闭程序
     if ExeHandle<>0 then
      begin
        SendMessage(ExeHandle,WM_Close,0,0);
        ExeHandle:=FindWindow('XLMAIN',nil);//返回句柄
      end;
    end;
      

  6.   

    多谢liucuiqiang(小强),不过俺菜鸟,没看过句柄的东东
      

  7.   

    我是如下方式调用的,正常:
        //ole容器初始化
        ComObj.CoInitializeEx(nil,0);
        V := CreateOleObject('Excel.Application');
        V.Caption := '移动长话清单';
        V.Application.SheetsInNewWorkbook := 2;
        V.Application.DisplayAlerts := False;
        V.Application.visible:=False;
        V.DisplayFormulaBar:= True;
        //do something
        V.Application.ActiveWorkbook.SaveCopyAs('xxx.xls');
        V.Application.ActiveWorkbook.close(SaveChanges:=False);
        V.Quit;
      

  8.   

    搂主:你的问题在于没有释放wsheet变量:
        SourceExcel.Workbooks.Close;
        SourceExcel.Quit;
        VarClear(wsheet);
        VarClear(SourceExcel);
    end;
    就没有问题了。
      

  9.   

    ExcelApp.Disconnect;
      ExcelApp.Quit;