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

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

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

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

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

在WorkbookOpen事件应用程序的情况下,就像我所期望的那样 – 当我在运行的Excel实例中打开现有的工作簿时,以及在我双击文件时捕获事件。 我想知道为什么这些事件处理不同?

在这种情况下我应该做什么? 我需要识别是否创build了新的工作簿,或者是否打开了现有的工作簿,而不pipeExcel是否已经运行。

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

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

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

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

在WorkbookOpen事件中检查

 string.IsNullOrEmpty(application.ActiveWorkbook.Path) 

这意味着您的工作簿从不保存。 在打开Excel时创build的所有新工作簿对于上面的行都是正确的。