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

标签 c# .net com excel-interop

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

相关文章:

c# - 打包项目时传递运行时依赖被丢弃,导致运行时失败

c# - EntityFramework Fluent API 外键排序

c# - 简单更新查询不更新。没有异常(exception),没有错误。没什么

c# - 如何控制使用 AutoDual 生成的 COM 接口(interface)的生成接口(interface) GUID

c# - 如何在C#中实现OLE服务器

c# - list 文件的 dependentAssembly/assemblyIdentity 元素中的版本号

C# - 无法反序列化当前的 JSON 数组

c# - NullReferenceException 与 Nullable DateTime 尽管空检查

.net - 匹配 .NET 中未被另一个 x 转义的 x 或\

.net - 如何让客户端和服务器保持对话