如何终止基于C#的Excel应用程序实例?

我正在研究一些小的代码来读取一些Excel文件。 我已经链接了Excel 15的COM库,并使用下面的代码来读取Excel文件:

excelInstance = new Microsoft.Office.Interop.Excel.Application(); Workbook workbook = excelInstance.Workbooks.Open(@excelOpenFileDialog.FileName); Worksheet worksheet = workbook.Worksheets[1]; Range UsedRange = worksheet.UsedRange; int lastUsedRow = UsedRange.Row + UsedRange.Rows.Count - 1; 

问题是我不知道如何终止我的处理完成后的Excel实例。 Excel应用程序界面不是一次性的,那么还有另一种方法吗?

处理Excel COM对象可能有点挑剔。 确保完成后在工作簿上调用Close ,然后Quit Excel.Application的实例。

通过调用FinalReleaseComObject()释放对象,并为了冗余,显式地使COM对象为null:

 Runtime.InteropServices.Marshal.FinalReleaseComObject(sheet); Runtime.InteropServices.Marshal.FinalReleaseComObject(workbook); Runtime.InteropServices.Marshal.FinalReleaseComObject(app); sheet = null; workbook = null; app = null; 

最后,如果在调用适当的处置方法,明确释放它们,并清空对象的引用之后,如果这些凿子仍然没有消失,请调用垃圾收集器:

 GC.Collect(); GC.WaitForPendingFinalizers(); 

希望这将最终做到这一点。

干杯。

编辑:另外,一定要在exception处理程序中执行此操作,如果在使用Interop对象时有可能会发生代码炸弹,或者是因为它们。 即使父节点终止,你也将离开僵尸进程。

根据这里的MSDN文档,使用Quit()方法closures您的实例,如下所示:

 var excelInstance = new Microsoft.Office.Interop.Excel.Application() // Do stuff excelInstance.Quit();