我使用excel填充一些数据并使用以下代码创建报告:
Excel.Application app = new Excel.Application();
Excel.Workbook workbook = app.Workbooks.Open(templatePath);
Excel.Worksheet worksheet = workbook.Worksheets[1];
worksheet.Cells[1, 2] = myInbox.FolderPath;
worksheet.Cells[2, 2] = DateTime.Today.ToShortDateString();
worksheet.Cells[2, 4] = DateTime.Now.ToShortTimeString();
app.Visible = true;
workbook.RefreshAll();
这一切似乎都运行正常,但是当我查看任务管理器时,我注意到有几个excel实例在"后台进程"中打开。每次运行代码时似乎都有一个excel实例,尽管每次都关闭excel。
如果我手动打开Excel,这些后台进程甚至都不会出现。
答案 0 :(得分:4)
好的,所以我很快就找到了答案,我没有正确发布互操作对象,这就是为什么它们在应用程序退出后仍然存在。
我已经在下面提供了正确答案的链接,但作为参考,关闭这些对象的代码是:
Excel.Application app = new Excel.Application();
Excel.Workbooks workbooks = app.Workbooks;
Excel.Workbook workbook = workbooks.Open(templatePath);
Excel.Worksheet worksheet = workbook.Worksheets[1];
//do stuff to worksheet here
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
Clean up excel interop objects
所以我今天对垃圾收集了解不多。