Офисные надстройки ленты: та же вкладка с 2 надстройками

Я пытаюсь сделать так, чтобы две надстройки для слов появлялись на одной вкладке (Инструменты), но обе они создают уникальные вкладки (есть две вкладки "Инструменты"). Я видел это видео, но я использую Visual Designer, а не XML.

Могу ли я каким-то образом отредактировать код дизайнера, чтобы сделать эту работу?

1 ответ

Решение

http://blogs.msdn.com/b/vsto/archive/2008/03/10/share-a-ribbon-customization-between-office-applications.aspx

Office 2007

Создать ленту

  1. Создайте проект 2007 Excel, Outlook, PowerPoint или Word в Visual Studio. Для этих шагов создайте проект C# и назовите проект RibbonStarterProject.
  2. Добавьте элемент ленты (Visual Designer) в проект. Для этих шагов примите имя по умолчанию "Лента 1".
  3. Сохраните и закройте проект.

Создать проект библиотеки классов

  1. Создайте новый проект библиотеки классов в Visual Studio. Для этих шагов назовите проект SharedRibbonLibrary.
  2. Добавьте ссылку на проект в сборку Microsoft.Office.Tools.Common.v9.0.
  3. В меню проекта в Visual Studio щелкните Добавить существующий элемент.
  4. В диалоговом окне "Добавить существующий элемент" перейдите в каталог проекта "RibbonStarterProject", выберите файл Ribbon.cs и нажмите "Добавить". Ribbon1.cs копируется в каталог проекта и отображается под узлом проекта в обозревателе решений.
  5. Дважды щелкните Ribbon1.cs. Появится дизайнер ленты.
  6. На вкладке "Элементы управления ленты Office" панели инструментов перетащите кнопку на группу1.
  7. Нажмите button1, чтобы выбрать его.
  8. В окне "Свойства" установите для "Модификаторы" значение "Общий". Примечание. По умолчанию элементы управления, добавляемые на ленту, являются внутренними. Это делает их доступными только для кода внутри одной сборки. Однако, когда вы получите доступ к этим элементам управления, вы получите доступ к ним через ссылку на сборку. Поэтому, чтобы получить доступ к ним из кода, вы должны сделать их публичными. Подробнее об этом в ближайшее время.
  9. Щелкните правой кнопкой мыши дизайнер ленты и выберите Свойства.
  10. В окне "Свойства" щелкните свойство RibbonType, а затем выберите идентификаторы ленты в приложениях или окнах инспектора Outlook, в которых должна отображаться лента. Дополнительные сведения об этом свойстве см. В справочном разделе MSDN для свойства RibbonType.
  11. В обозревателе решений щелкните правой кнопкой мыши Ribbon1.cs и выберите команду "Просмотреть код".
  12. Измените пространство имен класса на "SharedRibbonLibrary".
  13. Повторите этот шаг для файла Ribbon1.designer.cs.
  14. Скомпилируйте и сохраните проект SharedRibbonLibrary. Теперь вы можете использовать полученную сборку в любом проекте VSTO, который поддерживает ленту.

Потреблять настройки ленты

  1. Создайте 2007 Excel, Outlook, PowerPoint или Word проект.
  2. Добавьте ссылку на сборку SharedRibbonLibrary.
  3. Добавьте следующий код в класс ThisAddin, ThisWorkbook или ThisDocument вашего проекта. Этот код переопределяет метод CreateRibbonExtensibilityObject и возвращает ленту в приложение Office.

    protected override Microsoft.Office.Core.IRibbonExtensibility
    CreateRibbonExtensibilityObject()
    {
         return new Microsoft.Office.Tools.Ribbon.RibbonManager(
         new Microsoft.Office.Tools.Ribbon.OfficeRibbon[] { new       
            SharedRibbonLibrary.Ribbon1() });
    
    }
    
  4. Добавьте новый класс в проект. Примите имя по умолчанию "Class1.cs".

  5. Замените код в файле Class1 следующим:

     partial class ThisRibbonCollection :    Microsoft.Office.Tools.Ribbon.RibbonReadOnlyCollection
    {
     internal SharedRibbonLibrary.Ribbon1 Ribbon1
     {
         get { return this.GetRibbon<SharedRibbonLibrary.Ribbon1>(); }
     }
    }
    

Хорошо, вы сделали! Теперь вы можете получить доступ к ленте и кнопке, которую вы добавили к ленте в своем коде. Давайте попробуем обработать событие в потребляющем проекте.

Обрабатывать событие нажатия кнопки

  1. Добавьте следующий код в обработчик событий запуска проекта.

    Globals.Ribbons.Ribbon1.button1.Click += new EventHandler<Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs>(button1_Click);
    
  2. Добавьте следующий обработчик событий в ваш проект:

    void button1_Click(object sender,
    Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs e)
    {
    System.Windows.Forms.MessageBox.Show("I can handle events!");
    }
    
  3. Запустите проект.

  4. Когда откроется приложение Office, перейдите на вкладку "Надстройки" и нажмите кнопку. Появится сообщение "Я могу обрабатывать события!".

РеализацияOffice 2010: http://blogs.msdn.com/b/vsto/archive/2010/06/23/sharing-a-ribbon-customization-between-office-projects-in-visual-studio-2010-mclean-schofield.aspx

Реализация 2010 года фактически добавляет две ленты - по одной для каждой надстройки. Я считаю, что эта статья применима только к надстройкам на одной ленте в разных продуктах Office (например, Word и Excel), но не к двум надстройкам Excel.

Единственный другой путь, который я нашел, - это сторонний компонент: http://www.add-in-express.com/creating-addins-blog/2012/11/05/excel-addin-shared-ribbon-tabs/

Другие вопросы по тегам