最近开发一个工具,需要调用Office.Intreop.Excel,最后关闭Excel对象的时候,明明调用了close和quit方法,打开进程一看,Excel进程依然存在,说明资源没有被正确关闭,虽然不影响使用,但是很不美观,不优雅,这不是一个合格的程序。
网上搜了很多方法,一个一个去尝试,很多方法都不能解决,但是最终还是找到了可以解决的方法,话不多说,直接贴代码,后面作解释:
try
{
Excel.Application excel = new Excel.Application();
Excel.Workbooks workbooks = excel.Workbooks;
Excel.Workbook workbook = workbooks.Open("FileName");
...
...
...
}
catch (Exception e) { }
finally
{
workbook.Save();
workbook.Close();
workbooks.Close();
excel.Quit();
GC.Collect();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
}
首先,在COM Objects中,永远不要使用两个 ".",例如:
// 写法1
Excel.Application excel = new Excel.Application();
Excel.Workbook workbook = excel.Workbooks.Open("FileName");
// 写法2
Excel.Application excel = new Excel.Application();
Excel.Workbooks workbooks = excel.Workbooks;
Excel.Workbook workbook = workbooks.Open("FileName");
千万要避免用第一种写法,用第二种写法,因为你永远都不知道连着用“.”会出现什么样的bug(亲测有bug)