Excel加载项中的Application.ActiveWorkbook为空

我正在写一个Excel加载项。 以下是我的代码

private void ThisAddInStartup(object sender, EventArgs e) { Excel.Sheets sheets = Application.ActiveWorkbook.Sheets; _worksheet = (from Excel.Worksheet sheet in sheets where sheet.Name.Contains(SheetName) select sheet).FirstOrDefault(); Application.SheetChange += ApplicationSheetChange; } 

当我debugging时,一切都很好。 但是,当我直接从我的硬盘驱动器打开Excel文件,然后我得到Application.ActiveWorkbooknull 。 任何人都可以帮助我理解这一点。

我想在excel文件打开时启动我的加载项。 基本上我的加载项跟踪Excel工作簿中的变化,并做一些必要的行动。

如果有问题,我正在使用Office 2007,Visual Studio 2012.我可以在更改项目文件并用12replaceOffice 14部分后运行解决scheme。

我假设你的意思是ThisAddIn_Startup ,而不是ThisAddInStartup 。 如果没有,那么这可能是一个问题。

build议您不要尝试访问ThisAddin_Startup方法中的文档。 这是因为Office运行此方法时并不总是有一个文档,所以你可能会遇到一些奇怪的行为。 相反,当用户打开一个文档并在那里运行你的代码时,钩入事件。 它应该看起来像这样(注意:我没有testing这个代码,但它应该工作):

 private void ThisAddIn_Startup(object sender, System.EventArgs e) { // Hook into the workbook open event this.Application.WorkbookOpen += new AppEvents_WorkbookOpenEventHandler(WorkWithWorkbook); } private void WorkWithWorkbook(Microsoft.Office.Interop.Excel.Workbook workbook) { // Workbook has been opened. Do stuff here. } 

查看关于编写应用程序级插件的MSDN文章。 具体讲讲应用程序启动时谈到访问文件的部分。

http://msdn.microsoft.com/en-us/library/vstudio/bb157876.aspx