使用 C# 打开 excel 实例 [重复]

Posted

技术标签:

【中文标题】使用 C# 打开 excel 实例 [重复]【英文标题】:Opening instances of excel using C# [duplicate] 【发布时间】:2015-08-11 22:55:48 【问题描述】:

我正在使用 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,这些后台进程甚至都不会出现。

【问题讨论】:

过去我遇到过很多关于 Excel 实例的问题。 Excel 的实例管理与 Office 套件的其余部分不同。您是否使用 Application.Quit 关闭 Excel 实例? 手动关闭和编程关闭时会发生这种情况。 为什么要删除自己的答案? 因为不行,所以还是出现了excel的实例。 【参考方案1】:

好的,所以我很快就找到了答案,我没有正确释放互操作对象,这就是为什么即使在应用程序退出后它们仍然存在的原因。

我在下面提供了正确答案的链接,但关闭这些对象的代码是:

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

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

【讨论】:

以上是关于使用 C# 打开 excel 实例 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中实例化一个数组 - 从 VB 转换 [重复]

打开多个 Excel 实例时如何通过 Excel 宏将数据从 Excel 导出到 Access

Discord.NET '对象引用未设置为对象的实例。 C# [重复]

Excel进程未关闭[重复]

c#将类实例传递为null而不是作为ref [重复]

C#从反射类型实例化通用列表[重复]