-1

我正在使用此代码创建 Excel 报告:

 var excel = new Excel.Application();
 foreach (var report in m_reports)
     report.PrintReport(excel.Workbooks.Add().Sheets.Add());
 excel.Visible = true;

一切正常。但是,当用户手动关闭 Excel 时,Excel 进程在任务管理器中保持打开状态。为什么?

4

2 回答 2

3

在 MSDN 上查看有关发布 ComObjects的信息

System.Runtime.InteropServices.Marshal.ReleaseComObject( excel );

另外,如果您想在该 foreach 循环中执行其他操作,我建议您以正确的代码块格式包装您的代码,例如

 foreach (var report in m_reports)
 {
    report.PrintReport(excel.Workbooks.Add().Sheets.Add());
 }
 excel.Visible = true;
 //Release the ComObject
 System.Runtime.InteropServices.Marshal.ReleaseComObject( excel );
于 2012-11-30T01:16:07.410 回答
1

这个答案有一个很好的规则: 如何正确清理 Excel 互操作对象?

“永远不要在 com 对象中使用两个点。”

您正在声明工作簿和工作表对象而从未释放它们 - 这就是该过程不会退出的原因。

于 2012-11-30T01:00:31.583 回答