gpt4 book ai didi

c# - 互操作后 Excel 进程保持打开状态;传统方法行不通

转载 作者:太空狗 更新时间:2023-10-29 18:07:36 27 4
gpt4 key购买 nike

我在调试某些代码时遇到了问题。 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com