Opening instances of excel using C#
本问题已经有最佳答案,请猛点这里访问。
我正在使用Excel填充一些数据并使用以下代码创建报表:
1 2 3 4 5 6 7 8 9 10 | 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,这些后台进程甚至都不会出现。
好的,所以我很快就找到了答案,我没有正确地释放互操作对象,这就是为什么即使在应用程序退出后,它们仍然存在的原因。
我已经包含了下面正确答案的链接,但是为了参考,关闭这些对象的代码是:
1 2 3 4 5 6 7 8 9 10 11 | 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); |
清除Excel Interop对象
所以今天我对垃圾收集了解得不多。