【问题标题】:How can I deploy the .dna file from ExcelDna?如何从 ExcelDna 部署 .dna 文件?
【发布时间】:2016-10-31 22:26:34
【问题描述】:

我正在尝试使用以下代码创建一个响应数据透视表更改的 Excel (2007) 加载项:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    Excel.Worksheet sh = this.Application.ActiveSheet;

    sh.PivotTableUpdate += new
Excel.DocEvents_PivotTableUpdateEventHandler(sh_PivotTableUpdate);
}

void sh_PivotTableUpdate(Excel.PivotTable TargetPivotTable)
{
    MessageBox.Show("sh_PivotTableUpdate event fired");
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}

创建 .dll 后,部署它/生成 .xll 文件就成了一项挑战;我在那里使用this post 进行指导,现在确实有一个 .xll 文件。

我能够将它添加到我想要响应代码的 Excel 电子表格(.xlsx 文件)中(通过文件 > Excel 选项 > 加载项 > 转到... > 浏览),但得到这个错误消息关于添加 .xll 文件:

我确实看到这里有一个 *.dna 文件 \packages\ExcelDna.AddIn.0.33.9\content\ExcelDna-Template.dna

...但是制作该文件的副本并将其名称更改为 [projectName].dna (Excel2010AddInForRptRunner-AddIn.dna),然后将其复制到与带有 .xlsx 的 .xll 文件相同的位置文件不是解决方案(没有双关语)。手动更改数据透视表不会触发事件/我没有看到“触发 sh_PivotTableUpdate 事件”消息。

.dna 文件确实像这样引用 .dll:

<ExternalLibrary Path="Excel2010AddInForRptRunner.dll" LoadFromBytes="true" Pack="true" />

那么我需要做些什么来解决我得到的错误消息并让 .xll 文件被电子表格接受,以便其代码运行并触发 PivotTableUpdate 事件处理程序?

【问题讨论】:

  • 你应该忽略你链接到的帖子——在包目录中重命名文件的建议是不正确的。 ExcelDna.AddIn NuGet 包会自动设置您需要的一切。

标签: pivot-table excel-interop office-addins excel-addins excel-dna


【解决方案1】:

我在您的 sn-p 中看到了两个问题:

首先是您似乎将 VSTO Office 的东西与 Excel-DNA 混合在一起(我从与 VSTO 相关的 ThisAddIn_... 代码中看到了这一点)。这些根本不混合 - 您不能在 VSTO 加载项项目中使用 Excel-DNA。任何以Microsoft.Office.Tools... 开头的命名空间都表明存在问题。如果您以“Office 加载项”或“Excel 加载项”作为项目类型开始,则可能会发生这种情况。

您的项目中也存在与 NuGet 包相关的问题 - 输出文件不知何故位于包目录中,或者包目录已被覆盖或以某种方式更改。你不应该在packages\...下编辑任何东西

如果一切正确,那么您感兴趣的文件将在您的项目目录下的bin\Debug 和bin\Release 中找到。通常您只能重新分发单个 ...-AddIn-packed.xll 文件(您也可以根据需要重命名)。

我建议您创建一个新的“类库”项目(不是 Office 插件或类似的东西)并再次安装 ExcelDna.AddIn 包。然后按照弹出的自述文件中的说明制作一个带有单个 UDF 函数的简单插件,并检查它是否运行并且可以正确调试和部署。

在您完美运行之后,您可以按照以下两个步骤将访问 COM 对象模型合并到您的加载项中:

  • 直接通过“添加引用”或从 NuGet 安装 ExcelDna.Interop 程序集添加对 Excel 互操作程序集(Microsoft.Office.Interop.Excel 和 Office)的引用。

  • 通过调用ExcelDnaUtil.Application 获取正确的Application 根对象。返回的对象可以转换为 Microsoft.Office.Interop.Excel.Application 并用于从那里获取整个 COM 对象模型,并连接您的事件处理程序等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 2022-07-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多