我在调试某些代码时遇到了问题。 Excel 互操作用于从工作簿中提取一些值;但是,程序退出后 Excel 仍保持打开状态。我已经尝试过传统的解决方案,但它仍然在运行代码的所有机器上保持对 Excel 的引用打开
private void TestExcel()
{
Excel.Application excel = new Excel.Application();
Excel.Workbooks books = excel.Workbooks;
Excel.Workbook book = books.Open("C:\\test.xlsm");
book.Close();
books.Close();
excel.Quit();
Marshal.ReleaseComObject(book);
Marshal.ReleaseComObject(books);
Marshal.ReleaseComObject(excel);
}
即使是这段简单的代码也能使进程运行多个文件(xlsm、xlsx、xls)。现在我们有一个解决方法来终止我们打开的 Excel 进程,但为了我自己的理智,我宁愿让它工作。
我应该补充一点,我已将其缩小到 Workbook
变量。如果我删除对 books.Open()
的调用以及对 book
的所有引用,它就会成功关闭。
最佳答案
这对我来说很成功:
xlApp.Quit();
//release all memory - stop EXCEL.exe from hanging around.
if (xlWorkBook != null) { Marshal.ReleaseComObject(xlWorkBook); } //release each workbook like this
if (xlWorkSheet != null) { Marshal.ReleaseComObject(xlWorkSheet); } //release each worksheet like this
if (xlApp != null) { Marshal.ReleaseComObject(xlApp); } //release the Excel application
xlWorkBook = null; //set each memory reference to null.
xlWorkSheet = null;
xlApp = null;
GC.Collect();
关于c# - 互操作后 Excel 进程保持打开状态;传统方法行不通,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8977571/