阻止用户使用Excel实例

时间:2011-08-30 00:07:35

标签: c# .net excel-interop

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

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

这会产生两个问题。首先,它会强制我的报告在可见之前进入可见性。其次,我的程序现在需要在Excel实例的注意下与用户对抗 - 而我的程序通常会丢失。

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我做了一些实验,我认为这样可行:

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

据我所知,用户可以打开和关闭任意数量的工作簿,它将使用您创建的第一个实例,只要您不删除它,第二个实例将被取消。< / p>