我在处理完Excel数据后需将其关闭,代码如下:
m_WorkBook.Close(true,Missing.Value,Missing.Value);
m_ExcelApp.Workbooks.Close();
m_ExcelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_WorkSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_WorkBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_ExcelApp);
m_WorkBook = null;
m_WorkSheet = null;
m_ExcelApp = null;
GC.Collect();
但为什么这样执行后在进程中仍有EXCEL.exe, 这样导致在下次打开Excel文档的时候有问题...
不知有何解?(我用的是C#, Excel 2000)

解决方案 »

  1.   

    唉,,调Excel的时候,,关闭确实是个问题,,不知道水晶报表是怎么做到的...你可以遍历系统的进程,把Excel进程杀掉(一个土方法.)
      

  2.   

    Aallonlin(风之力) 
    ------------------------方法可行,我以前编的程序就这样做的
      

  3.   

    m_WorkBook = null;
    m_WorkSheet = null;
    m_ExcelApp = null;你把这三句去掉。
    你加了这三句,GC.Collect(); 就没有实际工作了。
      

  4.   

    这个问题有好多人问过, 不过大多数的方法跟楼主用的方法一样,杀掉Excel进程是不可行的,Excel进程不仅程序用,用户也可能在用呢,楼主可以去搜索一下第三方之类的控件,第三方控件操作EXCEL一般不操作EXCEL进程,就是表面一样,实现的方法与机制不一样,以前用过一个,不过忘记了,呵呵..
      

  5.   

    你把你的关闭代码换成下述两行即可.不妨试试.
    m_ExcelApp=null;
    GC.Collect();
      

  6.   

    //关闭文件
    rptBook.Close(false,outFilePath,true);
    rptApp.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(rptSheet);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(rptBook);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(rptApp);
    //强制释放无用资源
    GC.Collect();