c# - 在 C#4.0 中创建并关闭 Excel 文件后,Excel 仍在任务管理器中运行

标签 c# excel

在创建 Excel 文件、从 C# 保存并关闭它后,我从任务管理器中释放 Excel 时遇到问题。

我使用以下代码创建 Excel 实例:

 Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();

Microsoft.Office.Interop.Excel.Workbook workbook = xlApp.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];

然后我填充我的工作表:

worksheet.Cells[1, 1] = "Test";
worksheet.Cells[1, 2] = "Test";
worksheet.Cells[1, 3] = "Test";
worksheet.Cells[1, 4] = "Test";

之后我保存工作簿:

workbook.SaveAs(filePath);

然后关闭它:

workbook.Close(false, false);

然后退出 Excel:

xlApp.Quit();

但是在我这样做之后,Excel 仍然出现在任务管理器中!!?!?

知道为什么在我调用 xlApp.Quit() 后它没有关闭吗?

提前致谢。

最佳答案

也许您可以尝试删除 Interop 并使用 EPPlus创建/修改 Excel 文件。非常简单,无需在计算机上安装 Office。

但如果您真的想使用 Interop,那么这可能会有所帮助(我一直在我的代码中使用它来确保一切都得到妥善处理,因为我必须在几分钟内创建 800 多个 excel 文件):

        workBook.Close(true, filePathTarget, Missing.Value);
        app.DisplayAlerts = true;
        app.Quit();
        Release(workSheet2);
        Release(workSheet1);
        Release(workBook);
        Release(workBooks);
        Release(app);
        workSheet2 = null;
        workSheet1 = null;
        workBook = null;
        workBooks = null;
        app = null;
        GC.Collect();
        GC.WaitForPendingFinalizers();

地点:

 private static void Release(object obj) {
        // Errors are ignored per Microsoft's suggestion for this type of function:
        // http://support.microsoft.com/default.aspx/kb/317109
        try {
            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj);
        } catch {
        }
    }

但如果您只处理 XLSX 文件,我强烈建议您尝试使用 EPPlus。它运行良好,速度快,效率高,不会依赖于安装的 Microsoft Office。使用它一个小时后,我在 5 分钟后放弃了 Interop...

关于c# - 在 C#4.0 中创建并关闭 Excel 文件后,Excel 仍在任务管理器中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10212522/

相关文章:

c# - WPF WebBrowser 控件的自定义上下文菜单

c# - Entity Framework Code First On Insert 方法 Hook

c# - 正则表达式中的 Unicode 字符

database - 对象关闭时不允许操作 - 在第一行创建表语句?

vba - Excel - 运行时错误 '1004' : Unable to set the hidden property of the range class

c# - 使用/不使用 SSL/TLS 在客户端上验证 wcf 端点的最佳实践

c# .net MVC4 模型来表示表格或表单

vba - Excel VBA 更改复制的事件工作表的名称

python | Excel csv 文件 Unicode 问题

arrays - 将行范围传递给 Excel 用户定义函数并将其分配给数组