我在调试代码时遇到了一些问题。使用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”的引用,则它可以成功关闭。