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

本文关键字:Excel 应用程序 实例 何终止 终止 | 更新日期: 2023-09-27 18:14:53

我正在编写一个小代码来读取一些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应用程序界面不是一次性的,所以有其他方法吗?

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

处理Excel COM对象可能有点棘手。确保你在完成工作簿时调用Close,在你的Excel.Application实例上调用Quit

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

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

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

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

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

希望这最终能解决问题。

欢呼。

编辑:此外,一定要在异常处理程序中这样做,如果有机会你的代码会爆炸,而你正在使用互操作对象,或者因为他们。即使父进程终止,也会留下僵尸进程。

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

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