使用C#打开excel实例

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对象

所以今天我对垃圾收集了解得不多。