1

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

4

2 回答 2

4

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

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

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();

并希望最终会做到这一点。

干杯。

编辑:此外,如果您的代码有可能在您使用 Interop 对象时或因为它们而发生爆炸,请务必在异常处理程序中执行此操作。即使父进程终止,您也会留下僵尸进程。

于 2013-05-21T14:31:38.413 回答
0

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

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

// Do stuff

excelInstance.Quit();
于 2013-05-21T14:30:01.560 回答