Application.ActiveWorkbook在Excel加载项中为null

本文关键字:null 加载项 Excel ActiveWorkbook Application | 更新日期: 2023-09-27 18:28:42

我正在编写一个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;
}

当我调试时,一切都很好。但是当我直接从硬盘打开excel文件时,我得到的Application.ActiveWorkbook就是null。有人能帮我理解这一点吗。

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

如果重要的话,我使用的是Office2007和VisualStudio2012。我可以在更改项目文件并用12替换Office 14部分后运行解决方案。

Application.ActiveWorkbook在Excel加载项中为null

我假设你指的是ThisAddIn_Startup,而不是ThisAddInStartup。如果没有,那可能是个问题。

建议您不要尝试访问ThisAddin_Startup方法中的文档。这是因为在运行此方法时,Office并不总是准备好文档,因此您可能会遇到一些奇怪的行为。相反,挂接一个事件,当用户打开文档并在那里运行代码时会触发该事件。它应该是这样的(注意:我还没有测试过这个代码,但它应该可以工作):

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