Как создать ленту надстройки MS WORD с помощью Open XML SDK для Office - PullRequest
0 голосов
/ 11 февраля 2019

В одном проекте 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, которая создает настраиваемую вкладку вСЛОВО док лента.Вкладка имеет несколько элементов управления (кнопки, флажки и т. Д.), Которые выполняют различные действия с помощью соответствующих обратных вызовов (аналогично примеру, показанному в моем посте выше).Я хочу преобразовать эту надстройку VSTO, чтобы сделать то же самое, используя Open XML SDK для Office, потому что надстройки VSTO не могут быть опубликованы в Microsoft Stores, как объяснено здесь .А новая функциональность офисных надстроек не поддерживает некоторые функции, которые поддерживает моя старая надстройка VSTO.

1 Ответ

0 голосов
/ 11 февраля 2019

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

По замыслу , Ribbon 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 идентификатор.Для общих элементов управления код в любом контейнере может ссылаться на них, пока известен идентификатор.

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

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

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

...