-1

Ich versuche, ein Excel (2007) Add-in zu erstellen, die Pivot-Tabelle Änderungen reagieren wird, diesen Code verwenden:Wie kann ich die .dna-Datei von ExcelDna bereitstellen?

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) 
{ 
} 

Sobald die DLL erstellt wurde, ein it/Erzeugen einer XLL-Datei wurde die Bereitstellung von Herausforderung; Ich habe this post als Anleitung verwendet und habe jetzt eine .xll-Datei.

Ich konnte dies in die Excel-Tabelle (.xlsx-Datei) hinzufügen, die ich auf den Code antworten möchte (über Datei> Excel-Optionen> Add-Ins> Gehe ...> Durchsuchen), aber erhalten Sie diesen Fehler msg auf Hinzufügen der XLL-Datei:

enter image description here

ich sah, dass es ein * ist .DNA hier \ packages Datei \ ExcelDna.AddIn.0.33.9 \ content \ ExcelDna-Template.dna

... aber eine Kopie dieser Datei erstellen und ihren Namen in [projectName] .dna (Excel2010AddInForRptRunner-AddIn.dna) ändern und sie dann an denselben Speicherort kopieren wie die .xll-Datei Die .xlsx-Datei ist nicht die Lösung (kein Wortspiel beabsichtigt). Wenn Sie die PivotTable manuell ändern, wird das Ereignis nicht ausgelöst/ich sehe keine "sh_PivotTableUpdate-Ereignis ausgelöst" -Meldung.

Die .DNA Datei wird die DLL-Referenz wie folgt:

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

Also, was muss ich tun, um die err msg ich zu lösen und nutzen Sie die XLL-Datei von der Tabelle in Kauf genommen werden, so dass sein Code ausgeführt wird und der PivotTableUpdate-Ereignishandler ausgelöst wird?

+1

Sie sollten den Beitrag, den Sie verknüpfen ignorieren - der Vorschlag der umbenennen Datei im Paketverzeichnis ist nicht richtig. Das 'ExcelDna.AddIn' NuGet-Paket richtet alles automatisch ein, was Sie brauchen. – Govert

Antwort

0

Es gibt zwei Probleme, die ich in Ihrem Schnipsel sehe:

Die erste ist, dass Sie die VSTO Office-Sachen mit Excel-DNA (Ich sehe das aus dem ThisAddIn_...-Code, der auf VSTO bezieht) zu haben scheinen gemischt . Diese mischen sich überhaupt nicht - Sie können Excel-DNA nicht in einem VSTO-Add-In-Projekt verwenden. Alle Namespaces, die mit Microsoft.Office.Tools... beginnen, weisen auf ein Problem hin. Dies kann passieren, wenn Sie mit einem "Office-Add-In" oder "Excel-Add-In" als Projekttyp beginnen.

Es gibt auch ein Problem in Ihrem Projekt im Zusammenhang mit den NuGet-Paketen - irgendwie sind die Ausgabedateien im Paketverzeichnis oder das Paketverzeichnis wurde irgendwie überschrieben oder geändert. Sie sollten unter nicht packages\... bearbeiten müssen je etwas

Wenn alles korrekt ist, dann werden die Dateien, die Sie interessieren werden in bin\Debug und bin\Release unter Ihrem Projektverzeichnis. Normalerweise können Sie nur die einzelne Datei ...-AddIn-packed.xll weitergeben (die Sie auch umbenennen können, wenn Sie möchten).

Ich empfehle Ihnen, ein neues "Klassenbibliothek" -Projekt zu erstellen (kein Office-Add-In oder ähnliches) und das ExcelDna.AddIn-Paket erneut zu installieren. Befolgen Sie dann die Anweisungen in der ReadMe-Datei, die angezeigt wird, um ein einfaches Add-In mit einer einzelnen UDF-Funktion zu erstellen, und überprüfen Sie, ob dieses ausgeführt wird und ordnungsgemäß debuggt und bereitgestellt werden kann.

Nachdem Sie haben das perfekt funktioniert, können Sie Zugriff auf den COM-Objektmodell in das Add-In, indem Sie diese beiden Schritte übernehmen:

  • einen Verweis auf die Excel Interop Baugruppen hinzufügen (Microsoft.Office.Interop.Excel und Office) entweder direkt über "Add Reference" oder durch Installation der ExcelDna.Interop Assembly von NuGet.

  • Erhalten Sie das Recht Application Root-Objekt, indem Sie ExcelDnaUtil.Application aufrufen. Das zurückgegebene Objekt kann auf eine Microsoft.Office.Interop.Excel.Application und verwendet gegossen werden von dort auf die gesamte COM-Objektmodell erhalten, und Ihre Event-Handler usw. anschließen

Verwandte Themen