c# - Excel Addin 中的 Application.ActiveWorkbook 为空

标签 c# excel c#-4.0 ms-office add-in

我正在编写一个 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.ActiveWorkbooknull。谁能帮我理解这一点。

我想在打开 Excel 文件时启动我的加载项。基本上,我的加载项正在跟踪工作簿 Excel 工作表中的更改并执行一些所需的操作。

如果重要的话,我使用的是 Office 2007、Visual Studio 2012。更改项目文件并将 Office 14 部分替换为 12 后,我能够运行该解决方案.

最佳答案

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

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

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

关于c# - Excel Addin 中的 Application.ActiveWorkbook 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18366738/

相关文章:

c# - 将选定值的集合从 Select2-Multi DropDownList 传递到 Controller

c# - 如何将目录中最早的 10 个文件移动到另一个目录

c# - 为什么 HtmlAgilityPack for .NET Core 1.5.0.1 找不到 HtmlWeb?是否有已知的解决方法或正确/更好的方法来做到这一点?

excel - Azure 数据工厂 - 从外部手动触发管道

excel - VBA - 循环遍历 Onedrive 上的文件夹

c# - 如何在域中以模拟用户身份运行提升的命令

c# - 如何让我的 MultiSelectList 绑定(bind)到我的数据模型?

c# - 新建具有非常大初始容量的 List<T> 并填充它与简单地填充 LinkedList<T> 的性能

在 Symfony Admin 中使用多个连接到 Excel 的 Mysql 查询

c# - 从 YouTube 获取缩略图并保存