idQ
ist der richtige Weg. Mit diesem Attribut können Sie eine qualifizierte ID angeben, d. h. eine ID innerhalb eines Namespaces. Einige Namespaces wie z.B. mso
sind eingebaut, aber es können auch eigene Namensräume angegeben werden.
Der Schlüssel ist, dass Sie eine xmlns:foo="bar"
Attribut in Ihrem customUI
Element, das mit dem Namensraum übereinstimmt, der in der Datei customUI
des Add-Ins eines Drittanbieters, das Sie zu erweitern versuchen.
Nehmen wir zum Beispiel an, ich habe die XML-Datei für das folgende Add-In eines Drittanbieters:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mso:customUI xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui"
xmlns:foo="bar">
<mso:ribbon>
<mso:tabs>
<mso:tab idQ="foo:someTab" label="an extensible custom tab">
<mso:group id="someGroup" label="a custom group">
<mso:button id="someButton" label="button" />
</mso:group>
</mso:tab>
</mso:tabs>
</mso:ribbon>
</mso:customUI>
Nun möchte ich die bestehende foo:someTab
mit einer neuen Gruppe in einem anderen Add-In oder einer Vorlage. Ich definiere eine customUI
in das neue Add-In einfügen und dabei sicherstellen, dass das gleiche Namespace-Attribut in der Datei customUI
Element. Dann verweise ich auf die vorhandene Registerkarte mit idQ="foo:someTab"
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mso:customUI xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui"
xmlns:foo="bar">
<mso:ribbon>
<mso:tabs>
<mso:tab idQ="foo:someTab" label="an extensible custom tab">
<mso:group id="someOtherGroup" label="a different custom group">
<mso:button id="someOtherButton" label="a different button" />
</mso:group>
</mso:tab>
</mso:tabs>
</mso:ribbon>
</mso:customUI>
Daraus ergeben sich zwei Gruppen auf einer einzigen benutzerdefinierten Registerkarte. Der gleiche Ansatz kann verwendet werden, um Gruppen und andere Container-Steuerelemente zu erweitern.
Ich habe dies durch sorgfältiges Studium der Office 2010 Multifunktionsleiste UI XSD . Leider ist es außerhalb der XSD selbst schlecht dokumentiert.