我写了个函数f(var1;var2;var3).函数里面定义了一个excelapp:variant变量,函数末尾有excelapp.quit;ExcelApp:=UnAssigned;用来释放变量。
主程序中调用一次函数的时候,进程中不会出现excel.exe;但是调用2次函数的时候进程就会出现一个excel.exe进程。
请问这是什么原因?为什么调用一次没有出现问题,调用两次就会出现问题?函数结束时候不是已经释放了吗?

解决方案 »

  1.   

    明显是EXCEL进程驻留问题,正确的关闭方式应该是:
           ExcelApp.activeworkbook.close;
           ExcelApp.quit;
           ExcelApp:=UnAssigned;
      

  2.   

    1楼的SmallHand兄弟,能再具体点吗?
    2楼的兄弟,你的方法我试了,不行!
      

  3.   

    补充一下,我定义了这两个变量ExcelApp,WorkBook:Variant;
    程序末尾是这样释放的:
    WorkBook.Close;
    ExcelApp.Quit;
    ExcelApp:=UnAssigned;
    主程序中调用一次没问题,调用一次后马上再调用一次,进程中就会多一个excel进程。
    大家能帮我看看是什么问题吗?我接触delphi还没一个月。不是很清楚细节问题。
      

  4.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
    i,j:integer;
    ExcelApp: Variant;
    begin
     if SaveDialog1.Execute then begin  ExcelApp := CreateOleObject( 'Excel.Application' );
      ExcelApp.WorkBooks.Add;
      try
       for i :=0  to 14 do
       ExcelApp.Cells[1,i+1].Value:='内容';   ExcelApp.activeworkbook.SaveAs(SaveDialog1.FileName);   messagebox(0,'数据导出完毕','提示',MB_ICONINFORMATION);
      end;
      finally
       ExcelApp.activeworkbook.close;
       ExcelApp.quit;
      end;
     end;
    end;
    你看到嘛?从头到尾一个Variant变量ExcelApp;
      

  5.   

    我把程序贴出来,大家帮我看看。(省略的跟变量无关的代码)
    procedure GetValue();
    var
      ExcelApp,WorkBook,ADOConnection:Variant;
    begin
      ExcelApp:=CreateOleObject('Excel.Application');
      WorkBook:=CreateOleObject('Excel.Sheet');
      WorkBook:=ExcelApp.WorkBooks.Open(ExcelFilePath)
      ExcelApp.WorkSheets[1].Activate;
      WorkBook.Close;
      ExcelApp.Quit;
      ExcelApp:=UnAssigned;
    end;
      

  6.   


    procedure GetValue(); 
    var 
      ExcelApp,WorkBook,ADOConnection:Variant; 
    begin 
      ExcelApp:=CreateOleObject('Excel.Application');   //WorkBook:=CreateOleObject('Excel.Sheet'); 
      //WorkBook:=ExcelApp.WorkBooks.Open(ExcelFilePath)   ExcelApp.WorkBooks.Open(ExcelFilePath);  //ExcelApp.WorkSheets[1].Activate; 
      //WorkBook.Close;   ExcelApp.activeworkbook.close;
      ExcelApp.Quit; 
      ExcelApp:=UnAssigned; 
    end; 
    从头到尾一个ExcelApp变量操作就够了.
      

  7.   

    谢谢楼上。我今天调试的时候突然找到了原因。是因为我的程序中途抛出异常,还来不及释放变量就直接退出了,所以导致任务管理器中有EXCEL.exe存在。