idQ
- верный путь. Этот атрибут позволяет вам указать квалифицированный идентификатор, то есть идентификатор в пространстве имен. Некоторые пространства имен, такие как mso
, встроены, но можно также указать пользовательские пространства имен.
Ключ в том, что вам необходим атрибут xmlns:foo="bar"
в вашем элементе customUI
, который соответствует пространству имен, объявленному в customUI
надстройки третьей стороны, которую вы пытаетесь расширить.
Например, предположим, у меня есть XML для следующей сторонней надстройки:
<?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>
Теперь я хочу расширить существующую foo:someTab
новой группой в другой надстройке или шаблоне. Я определяю customUI
в новой надстройке, убедившись, что в элементе customUI
указан тот же атрибут пространства имен. Затем я ссылаюсь на существующую вкладку, используя 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>
В результате две группы на одной пользовательской вкладке. Тот же подход можно использовать для расширения групп и других элементов управления контейнером.
Я узнал об этом благодаря тщательному изучению интерфейса пользователя ленты Office 10 XSD . К сожалению, он плохо документирован за пределами самого XSD.