Как мы можем создать ленту надстройки MS WORD с помощью Open XML SDK для Office

В одном VSTO для MS WORD, я создал настраиваемую ленту Office - с кнопкой - для WORD 2010-2016, используя VS2017 - Update 1809 следующим образом. Вопрос: как добиться того же, используя Open XML SDK 2.5 для Office в аналогичном VS2017 - проект Open XML для Office? Я не нашел в сети таких примеров:

Лента в примере VSTO:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns" label="my Ribbon Tab">
        <group id="ContentGroup" label="Content">  
          <button id="textButton" label="Insert Text" screentip="Text" onAction="OnTextButton"  
             supertip="Inserts text at the cursor location."/> 
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

Метод обратного вызова кнопки на ленте выше:

public void OnTextButton(Office.IRibbonControl control)
        {
            Word.Range currentRange = Globals.ThisAddIn.Application.Selection.Range;
            currentRange.Text = "This text was added by the Ribbon.";
        }

ОБНОВЛЕНИЕ:

Мотивация: я создал надстройку VSTO для MS WORD, которая создает настраиваемую вкладку на верхней ленте документа WORD. На вкладке есть несколько элементов управления (кнопки, флажки и т. Д.), Которые выполняют различные действия с помощью соответствующих обратных вызовов (аналогично примеру, показанному в моем сообщении выше). Я хочу преобразовать эту надстройку VSTO, чтобы сделать то же самое с помощью Open XML SDK для Office, потому что надстройки VSTO не могут быть опубликованы в Microsoft Stores, как описано в здесь. И новая функциональность надстройки Office не поддерживает некоторые функции, которые поддерживает моя устаревшая надстройка VSTO.


person nam    schedule 11.02.2019    source источник
comment
Добавление ленты в документ - это одно, а прикрепление кода - совсем другое. Где, по вашему мнению, будет находиться код? Чего именно вы пытаетесь достичь? Вы читали это обсуждение stackoverflow.com/questions/4499425/   -  person Cindy Meister    schedule 11.02.2019
comment
@CindyMeister. Хороший вопрос. Чтобы ответить на ваш вопрос, я добавил в свое сообщение выше раздел ОБНОВЛЕНИЕ.   -  person nam    schedule 11.02.2019


Ответы (1)


То, что вы себе представляете, к сожалению, невозможно.

По замыслу, XML ленты связан с кодом в том же «контейнере». XML ленты, хранящийся в документе Office, должен работать с обратными вызовами в коде VBA того же документа. Если вы использовали Office Open XML для вставки XML ленты в документ Word, то код, с которым он работает, должен находиться в компоненте VBA в том же документе. (Также стоит отметить, что компоненты VBA имеют формат не XML, а двоичный и поэтому не могут быть сгенерированы с использованием Open XML - только импортированные.)

Точно так же XML ленты, загруженный надстройкой COM (на основе IDTExtensibility2, будь то VSTO или любая другая надстройка COM), должен работать с кодом в этой надстройке. Обратные вызовы ленты не могут находиться в каком-либо другом «контейнере», хотя код обратного вызова может вызывать код вне «контейнера». (Обратите внимание, что лента VSTO не может быть вызвана кодом VBA ... и лента не хранится ни в одном документе.)

С помощью XML ленты в надстройках VBA и COM можно совместно использовать элементы управления ленты, назначив им Q id. Для общих элементов управления код в любом контейнере может ссылаться на них, если известен идентификатор.

Ленты, определенные в надстройках Office JS, также зависят от кода, находящегося в том же контейнере. Однако модель Office JS (пока?) Не работает с концепцией общих элементов управления.

В заключение: надстройки Office JS по-прежнему очень ограничены по сравнению с объектными моделями COM, будь то объектная модель приложения Office или лента («команды» на языке Office JS). Функциональность постоянно расширяется, в последнее время особое внимание уделяется Excel. Другие вещи (надеюсь) последуют.

Если есть конкретная функция, которая, по вашему мнению, должна иметь действительно высокий приоритет, вам следует перейти на UserVoice для разработки Office. Если запрос уже был сделан, проголосуйте за него. Если вы не можете его найти, создайте его.

person Cindy Meister    schedule 11.02.2019
comment
Спасибо за красиво объясненный ответ. Я уже записал свои пожелания в UserVoice for Office development. - person nam; 11.02.2019