System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsFile)
GC.Collect()
//其中xlsFile是个com的Object

解决方案 »

  1.   

    private   void   KillProcess(string   processName)  
      {  
      System.Diagnostics.Process   myproc=   new   System.Diagnostics.Process();  
      //得到所有打开的进程  
              try{  
              foreach   (Process   thisproc   in   Process.GetProcessesByName(processName))   {  
                    if(!thisproc.CloseMainWindow()){  
      thisproc.Kill();  
      }  
                      }  
                  }  
              catch(Exception   Exc)  
              {  
                      msg.Text+=   "杀死"   +   processName   +   "失败!";  
              }  
      }   
      

  2.   

    我只要关闭当前的这一个EXCEL即可,不能关闭所有的EXCEl进程
     
      

  3.   

    不知道你的是桌面程序还是web程序.你到网上找一个好点Excel导出的方法,网上很多的!有不占用进程的.
      

  4.   

    一直被一个问题困扰就是导出excel时如何关闭excel进程,我使用过oExcelApp.Quit(); 也用过GC回收,结果都不理想,后来发现可以kill进程,但是问题是kill进程 时不好解决多人并发的使用,比如一个人在导表然后kill所以的excel但是如果同时又有人在导表那么这就把另外一个excel结束了,现在我们要办的是如何kill当前这个进程,这里我们先看一下代码:oExcelApp.Quit();
        oExcelApp = null;
        PublicMethod.Kill(oExcelApp);//调用kill当前excel进程PublicMethod.Kill()内容是:using System.Runtime.InteropServices;
     public class PublicMethod
     {
      public PublicMethod()
      {
       //
       // TODO: 在此处添加构造函数逻辑
       //
      }
      [DllImport("User32.dll",   CharSet   =   CharSet.Auto)]   
      public static extern int GetWindowThreadProcessId(IntPtr hwnd,out int ID);
      public static void Kill(Excel.Application excel)
      {   
       IntPtr t=new IntPtr(excel.Hwnd);   //得到这个句柄,具体作用是得到这块内存入口   int k= 0;   
       GetWindowThreadProcessId(t,out k);   //得到本进程唯一标志k
       System.Diagnostics.Process p=System.Diagnostics.Process.GetProcessById(k);   //得到对进程k的引用
       p.Kill();     //关闭进程k
      }} 这样我们就可以关闭当前进程excel而不是杀掉所有的类型为excel进程了,
    ------------------------------------------------------------------------------
    找到了一个这样的 但运行时告诉我 excel.Hwnd 出错  
      

  5.   

    它不能关闭自己所在的内存,所以,你用关闭后,可能还不成功。把这个功能写在一个方法F,然后另写一个方法调用F,调用GC内存强制回收
      

  6.   

    想问你一下 我想取得EXCEL的句柄 该怎么做啊
    下面的方法:
    using System.Runtime.InteropServices; 
     public class PublicMethod 
     { 
      public PublicMethod() 
      { 
       // 
       // TODO: 在此处添加构造函数逻辑 
       // 
      } 
      [DllImport("User32.dll",   CharSet   =   CharSet.Auto)]    
      public static extern int GetWindowThreadProcessId(IntPtr hwnd,out int ID); 
      public static void Kill(Excel.Application excel) 
      {    
       IntPtr t=new IntPtr(excel.Hwnd);   //得到这个句柄,具体作用是得到这块内存入口    int k= 0;    
       GetWindowThreadProcessId(t,out k);   //得到本进程唯一标志k 
       System.Diagnostics.Process p=System.Diagnostics.Process.GetProcessById(k);   //得到对进程k的引用 
       p.Kill();     //关闭进程k 
      } } 
    老是报错 说是 excel.Hwnd 无效......不知道怎么回事??
    很是郁闷......
      

  7.   

    使用COM要注意“用完即释放”原则。
    你用excel会有那些application  book sheet之类的,用完之后,全部释放掉,在任务管理器就看不到它了。Marshal.ReleaseComObject(excelApp);
    excelApp=null;.....
    .....