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

use*_*661 4 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];
Run Code Online (Sandbox Code Playgroud)

然后我填充我的工作表:

worksheet.Cells[1, 1] = "Test";
worksheet.Cells[1, 2] = "Test";
worksheet.Cells[1, 3] = "Test";
worksheet.Cells[1, 4] = "Test";
Run Code Online (Sandbox Code Playgroud)

之后我保存工作簿:

workbook.SaveAs(filePath);
Run Code Online (Sandbox Code Playgroud)

然后关闭它:

workbook.Close(false, false);
Run Code Online (Sandbox Code Playgroud)

然后退出Excel:

xlApp.Quit();
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢.

Mad*_*Boy 6

也许您可以尝试删除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();
Run Code Online (Sandbox Code Playgroud)

哪里:

 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 {
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果您只处理XLSX文件,我真的建议您尝试使用EPPlus.它运行良好,快速高效,并且不会在正在安装的Microsoft Office上进行中继.使用它一个小时后,我在5分钟后放弃了Interop ...