-1

我试图创建一个Excel(2007)加载,将数据透视表的更改使用此代码作出回应,:如何从ExcelDna部署.dna文件?

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文件:

enter image description here

我没有看到有一个*。DNA这里提交\包\ ExcelDna.AddIn.0.33.9 \内容\ ExcelDna-Template.dna

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

的。DNA文件确实引用了该.dll像这样:

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

那么做我需要做什么来解决这个错误消息我弄到了.xll文件由电子表格来接受这样它的代码将运行并且PivotTableUpdate事件处理程序被触发?

+1

你应该忽视你的链接地址 - 建议重命名软件包目录中的文件不正确。 'ExcelDna.AddIn' NuGet包自动设置你需要的所有东西。 – Govert

回答

0

有两个问题,我在你的摘要中看到:

首先,你似乎已经混合VSTO办公室的东西用Excel-DNA(我看到这从​​代码,它涉及到VSTO) 。它们根本不混合 - 你不能在VSTO插件项目中使用Excel-DNA。任何以Microsoft.Office.Tools...开头的名称空间都表示存在问题。这可能发生在您开始使用“Office加载项”或“Excel加载项”作为项目类型。

您的项目中还有一些与NuGet包相关的问题 - 某种程度上,输出文件位于软件包目录中,或者软件包目录已被覆盖或以某种方式更改。你不应该有下packages\...

有史以来编辑任何内容,如果一切正常,那么您有兴趣将在bin\Debugbin\Release项目目录下找到该文件。通常,您只能重新分配单个...-AddIn-packed.xll文件(如果需要,也可以重命名)。

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

后你有完美的工作,您可以通过以下两个步骤合并访问COM对象模型到您的外接:

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

  • 通过调用ExcelDnaUtil.Application来获取根对象Application。返回的对象可以被转换为Microsoft.Office.Interop.Excel.Application和用于获取从那里整个COM对象模型,以及挂钩的事件处理程序等