我编写了一些从Excel文件中读取并输出Excel文件的C#程序。但是,我注意到在一天结束时,在程序终止并且所有文件都已关闭后,我仍有大量的Excel进程仍在运行。以下是我处理文件创建和关闭的方法:
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet ws = (Worksheet)wb.Worksheets[1];
...
wb.Close(true, saveDirectory + "\\" + reportName, false);
xlApp.Quit();
Marshal.ReleaseComObject(wb);
Marshal.ReleaseComObject(xlApp);
this.Close();
我错过了什么吗?任何建议都表示赞赏。
问候。
答案 0 :(得分:4)
您的代码未发布所有COM引用(例如xlApp.Workbooks.Add
创建对永不释放的Workbooks
对象的引用。因此,Excel实例不会关闭,如this KB article中所述,并在许多StackOverflow问题中详细讨论过。
当您的进程终止时,当COM检测到客户端暂时没有ping时,Excel实例最终会关闭。