1

我正在使用 Microsoft.Office.Interop.Excel 使用 C# 创建 Excel 报告。这些报告有大量的图形,需要很长时间来准备。在准备过程中,我的程序使用的 Excel 应用程序的实例对用户是隐藏的。

我的问题是 Microsoft Office 倾向于自动共享应用程序实例。如果用户打开 Excel 工作簿,Excel 将尝试查找正在运行的 Excel 实例并从那里打开文档。当用户在我的程序运行时尝试打开 Excel 工作簿时,它会附加到我的程序使用的实例上。

这会产生两个问题。首先,它迫使我的报告在它们应该变得可见之前变得可见。其次,我的程序现在需要与用户争夺 Excel 实例的注意力——而我的程序通常会失败。

那么,有没有办法让 Excel 实例拒绝请求(来自用户。它仍然应该服从我的程序)打开文档,并使 Office 在必须决定如何打开 Excel 文档时忽略我的实例?

4

3 回答 3

1

您可以处理Application.WorkbookOpen事件。在这里,要么启动 Excel 的第二个实例并让它打开工作簿,要么关闭工作簿并显示错误消息。

我还看到了Application.Interactive属性。我没有玩过这个,但它可能对你有用。

于 2011-08-30T00:33:44.260 回答
1

您可以使用 NPOI,建议您访问以下链接

http://npoi.codeplex.com/discussions/36157?ProjectName=npoi

于 2011-08-30T00:36:17.513 回答
0

我做了一些实验,我认为这会奏效:

每当您开始使用 Excel 时,请创建两个实例,然后使用第二个。完成工作后,删除第二个实例及其对象,然后检查第一个实例的“UserControl”属性。如果它返回“true”,则仅删除该对象,但留下该实例的进程。如果它返回“false”,则也删除该实例。

据我所知,用户可以打开和关闭任意数量的工作簿,它会使用您创建的第一个实例,只要您不删除它,第二个实例将不受干扰。

于 2013-03-14T19:57:42.747 回答