2

我正在编写一个 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 表中的更改并执行一些必要的操作。

如果重要的话,我使用的是 Office 2007、Visual Studio 2012。在更改项目文件并将 Office14部分替换为12.

4

1 回答 1

4

我假设您的意思是ThisAddIn_Startupand 而不是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

于 2013-08-21T20:43:57.867 回答