如何终止基于C#的Excel Application实例?

时间:2013-05-21 14:21:41

标签: 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应用程序界面不是Disposable,还有其他方法吗?

2 个答案:

答案 0 :(得分:4)

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

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

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


sheet = null;
workbook = null;
app = null;

最后,如果在调用适当的处理方法,显式释放它们并使对象的引用归零后,bugger似乎仍然没有消失,请调用垃圾收集器:

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

希望最终会这样做。

干杯。

编辑:另外,如果在使用Interop对象时,或者由于它们,您的代码可能会爆炸,请务必在异常处理程序中执行此操作。即使父节点终止,你也会离开僵尸进程。

答案 1 :(得分:0)

根据MSDN文档here,使用Quit()方法关闭您的实例,如下所示:

var excelInstance = new Microsoft.Office.Interop.Excel.Application()

// Do stuff

excelInstance.Quit();