如何从 ExcelDna 部署 .dna 文件?
How can I deploy the .dna file from ExcelDna?
我正在尝试创建一个 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 后,部署 it/generating .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 文件不是解决方案(没有双关语)。手动更改数据透视表不会触发 event/I 看不到 "sh_PivotTableUpdate event fired" 消息。
.dna 文件确实引用了 .dll,如下所示:
<ExternalLibrary Path="Excel2010AddInForRptRunner.dll" LoadFromBytes="true" Pack="true" />
那么我需要做什么来解决收到的错误消息并让电子表格接受 .xll 文件,以便其代码 运行 并触发 PivotTableUpdate 事件处理程序?
我在您的代码段中发现了两个问题:
首先是您似乎将 VSTO Office 的东西与 Excel-DNA 混合在一起(我从 ThisAddIn_...
代码中看到这一点,它与 VSTO 相关)。这些根本不混合 - 你不能在 VSTO 加载项项目中使用 Excel-DNA。任何以 Microsoft.Office.Tools...
开头的命名空间都表示存在问题。如果您以 "Office Add-In" 或 "Excel Add-in" 作为项目类型开始,则可能会发生这种情况。
您的项目中也存在与 NuGet 包相关的问题 - 输出文件以某种方式位于包目录中,或者包目录已被覆盖或以某种方式更改。您不必在 packages\...
下编辑任何内容
如果一切正确,那么您感兴趣的文件将在您的项目目录下的 bin\Debug
和 bin\Release
中找到。通常您只能重新分发单个 ...-AddIn-packed.xll
文件(如果需要,您也可以重命名)。
我建议您创建一个新的 "Class Library" 项目(不是 Office 加载项或类似的东西)并再次安装 ExcelDna.AddIn 程序包。然后按照弹出的 ReadMe 文件中的说明制作一个带有单个 UDF 函数的简单插件,并检查它是否运行并可以正确调试和部署。
在您完美运行之后,您可以按照以下两个步骤将 COM 对象模型的访问权限合并到您的加载项中:
添加对 Excel 互操作程序集(Microsoft.Office.Interop.Excel
和 Office
)的引用,可以直接通过 "Add Reference",也可以通过安装 ExcelDna.Interop 来自 NuGet 的程序集。
通过调用 ExcelDnaUtil.Application
获取正确的 Application
根对象。返回的对象可以转换为 Microsoft.Office.Interop.Excel.Application
并用于从那里获取整个 COM 对象模型,并连接您的事件处理程序等。
我正在尝试创建一个 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 后,部署 it/generating .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 文件不是解决方案(没有双关语)。手动更改数据透视表不会触发 event/I 看不到 "sh_PivotTableUpdate event fired" 消息。
.dna 文件确实引用了 .dll,如下所示:
<ExternalLibrary Path="Excel2010AddInForRptRunner.dll" LoadFromBytes="true" Pack="true" />
那么我需要做什么来解决收到的错误消息并让电子表格接受 .xll 文件,以便其代码 运行 并触发 PivotTableUpdate 事件处理程序?
我在您的代码段中发现了两个问题:
首先是您似乎将 VSTO Office 的东西与 Excel-DNA 混合在一起(我从 ThisAddIn_...
代码中看到这一点,它与 VSTO 相关)。这些根本不混合 - 你不能在 VSTO 加载项项目中使用 Excel-DNA。任何以 Microsoft.Office.Tools...
开头的命名空间都表示存在问题。如果您以 "Office Add-In" 或 "Excel Add-in" 作为项目类型开始,则可能会发生这种情况。
您的项目中也存在与 NuGet 包相关的问题 - 输出文件以某种方式位于包目录中,或者包目录已被覆盖或以某种方式更改。您不必在 packages\...
如果一切正确,那么您感兴趣的文件将在您的项目目录下的 bin\Debug
和 bin\Release
中找到。通常您只能重新分发单个 ...-AddIn-packed.xll
文件(如果需要,您也可以重命名)。
我建议您创建一个新的 "Class Library" 项目(不是 Office 加载项或类似的东西)并再次安装 ExcelDna.AddIn 程序包。然后按照弹出的 ReadMe 文件中的说明制作一个带有单个 UDF 函数的简单插件,并检查它是否运行并可以正确调试和部署。
在您完美运行之后,您可以按照以下两个步骤将 COM 对象模型的访问权限合并到您的加载项中:
添加对 Excel 互操作程序集(
Microsoft.Office.Interop.Excel
和Office
)的引用,可以直接通过 "Add Reference",也可以通过安装 ExcelDna.Interop 来自 NuGet 的程序集。通过调用
ExcelDnaUtil.Application
获取正确的Application
根对象。返回的对象可以转换为Microsoft.Office.Interop.Excel.Application
并用于从那里获取整个 COM 对象模型,并连接您的事件处理程序等。