2009-08-12 7 views
1

Ich habe ein Projekt, das Microsoft Word mithilfe eines XML-Erweiterungspakets Funktionalität hinzufügt. Derzeit, wenn das Dokument, das wir dem Kunden geben, geöffnet wird, lädt es unser Paket, das die SmartDocInitialize-Methode ausführt, die Dinge zum Hauptmenü und zur Symbolleiste hinzufügt, die Microsoft.Office.Core.CommandBar.Controls.Add und ähnliches verwenden. Ohne Änderungen werden diese Schaltflächen beim Öffnen in Word 2007 auf der Registerkarte "Add-Ins" hinzugefügt. Dies ist jedoch nicht ideal, da die Schaltflächen alle klein sind, nicht ordnungsgemäß gruppiert sind und es keine Möglichkeit gibt, die Registerkarte "Add-Ins" aufzurufen die Vorderseite, wenn das Dokument geladen ist.Programmgesteuertes Hinzufügen einer Multifunktionsleiste zu Microsoft Word 2007

Ich möchte diese Funktionalität beibehalten, wenn das Dokument in Office 2003 geöffnet wird, aber wenn das Dokument in Office 2007 geöffnet wird, möchte ich eine XML-Datei einlesen, die meine neue Multifunktionsleisten-Registerkarte und alle Funktionen beschreibt die Knöpfe. Alles, was ich online gefunden habe, scheint dazu geführt zu haben, dass die Ribbon-Datei nur dann geladen wird, wenn Sie eine sehr spezielle Kombination von Magie haben (in Visual Studio bauen und es funktioniert, aber keine Informationen darüber, wie Sie es für einen Benutzer bereitstellen würden) Box) und funktioniert nur, wenn Sie ein ganzes Projekt ursprünglich mit den Visual Studio-Tools für Office-Eigenschaften erstellt haben, die ich derzeit nicht habe.

Unsere Entwicklungsumgebung ist XP, Visual Studio 2005, C#, .NET 2.0

Antwort

2

The Ribbon UI ist einfach nicht so programatic wie die alte Command UI. Ich glaube nicht, dass du tun kannst, was du willst. Soweit ich weiß, besteht die einzige Möglichkeit, die Ribbon-Benutzeroberfläche programmatisch zu ändern, darin, dass ein COM-Add-In die IRibbonExtensibility-Schnittstelle implementiert und eine benutzerdefinierte XML-Datei (mit der Ribbon-Definition) von der GetCustomUI-Methode zurückgibt. Es gibt keine Möglichkeit, Schaltflächen nacheinander hinzuzufügen oder zu entfernen, wie dies mit der CommandBars-Benutzeroberfläche möglich ist. Es ist einfach total anders. Ich glaube nicht, dass Sie aus einigen Makros in einem Dokument das machen können, was Sie wollen.

Ich bin nicht vertraut mit XML-Erweiterungen, aber wenn Sie sie auf dem PC des Benutzers installieren müssen, könnten Sie vielleicht auch ein Add-In installieren, das die entsprechende Ribbon-XML für Sie laden könnte.

+0

Alles, was ich für das COM-Add-In gesehen habe, sagen, dass sie mit der Anwendung geladen sind, nicht pro Dokument. So kann ich leider nicht umgehen. Ich habe herausgefunden, wie man die Multifunktionsleiste pro Dokument hinzufügt, aber auf diese Weise scheint die onAction-Funktion ein VBA-Makro zu sein, und es fällt mir schwer herauszufinden, wie ich mein VBA-Makro aufrufen kann meine Ereignishandler in C#. Wenn Sie etwas darüber wissen, fügen Sie bitte eine Antwort zu dieser Frage hinzu: http://stackoverflow.com/questions/1288717/is-it-possible-to-call-c-dlls-from-visual-basic-code-contained -in-a-word-2007-fi –

+0

Meine Vermutung ist, dass Sie die .NET-Klassen COM in irgendeiner Weise sichtbar machen müssen, damit VBA (was COM-Basen ist) sehen und mit ihnen arbeiten kann. Das ist aber außerhalb meiner Expertise. –

+0

Ich habe das gefunden. Nur zur Information. https://social.msdn.microsoft.com/Foren/office/de-DE/ddf4a3fe-16af-440d-9697-9a3bf53b52c3/anpassen-Microsoft-Word-2007-in-cnet-Windows-Anwendung-mit-Microsoft Office-Interopword? Forum = Worddev Nicht möglich, denke ich. .. –

0

Dies ist nicht so schwer wie es scheint.

Wenn Sie Ihre Multifunktionsleisten-Schaltflächen bereits mit einigen VBA-Makros im Dokument verbunden haben, müssen Sie lediglich eine Referenz in Ihrem VBA-Projekt zu Ihrer com sichtbaren Netzwerkbaugruppe hinzufügen.

Die .net-Assembly muss nicht nur als sichtbar markiert sein (damit sie im Dialogfeld "Referenzen" als Typbibliothek angezeigt wird), sondern auch über einige Methoden, die von VBA aufgerufen werden können.

google „vba .net aufrufbar“

seine nicht schwer, mark-Klasse als com sichtbar, erklären sie mit einem Programm-ID-Attribut, machen Methoden Öffentlichkeit, stellen Sie sicher, Ihre Methoden einfache Typen zurückgeben, und verwenden Sie regasm das registrieren Assembly auf der Zielmaschine (nicht auf der Dev Box).