Excel VSTO NewWorkbook事件在启动时不会发生

时间:2013-08-06 15:12:13

标签: c# excel vsto

我正在开发Excel 2010应用程序级插件。我需要为与Workbook接口相关的一些Application事件编写处理程序,尤其是NewWorkbook事件。

所以在ThisAddIn_Startup处理程序中我添加了这样的代码:

Microsoft.Office.Interop.Excel.AppEvents_Event app = Globals.ThisAddIn.Application;
app.NewWorkbook += MyApp_NewWorkbook;

在运行Excel实例中创建新工作簿时,它可以正常工作。但是当我运行新的Excel实例(在标准情况下,意味着创建新的工作簿)时,我的处理程序不会捕获此事件。我想当我运行新的Excel实例时,NewWorkbook事件发生在ThisAddIn_Startup事件之前。

如果WorkbookOpen事件应用程序的行为与我期望的一样 - 当我在正在运行的Excel实例中打开现有工作簿时以及当我只是双击该文件时捕获事件。我想知道为什么这些事件的处理方式不同?

在这种情况下我该怎么办?无论Excel是否已经运行,我都需要识别是否已创建新工作簿或是否已打开现有工作簿。

2 个答案:

答案 0 :(得分:1)

如何在加载项加载时打开的所有工作簿上执行操作?

ThisAddIn_Startup处理程序中的以下内容? (这里没有IDE,所以手写):

foreach (var workbook in Globals.ThisAddIn.Application.Workbooks)
{
  // Do your thing
}

然后使用您的事件处理来捕获随后打开的任何工作簿。

答案 1 :(得分:1)

在WorkbookOpen事件中检查

string.IsNullOrEmpty(application.ActiveWorkbook.Path)

表示永远不会保存您的工作簿。打开Excel时创建的所有新工作簿都适用于上述行。