Надстройка Microsoft Word - Добавить в контекстное меню - PullRequest
0 голосов
/ 19 декабря 2018

Я создал надстройку для Word и теперь хотел бы добавить опцию для вызова функции из нее, когда пользователь выделяет слово и щелкает по нему правой кнопкой мыши.Я нашел документацию здесь о том, как изменить файл manifest.xml, но он, кажется, не показывает полный пример того, как добавить в контекстное меню, только как добавить кнопки и выпадающие меню.

Документация также указывает на страницу с примерами github , но опять же отсутствует в контекстных меню.Это также указывает на это видео, которое, кажется, показывает то, что я хочу около 1:20, но также не показывает, как его реализовать.

Пока у меня есть это (добавлено ниже<FunctionFile>):

<ExtensionPoint xsi:type="ContextMenu">
  <OfficeMenu id="ContextMenuText">
    <Control xsi:type="Menu" id="TestMenu">
      <Label resid="ContextMenuLabel" />
      <Supertip>
          <Title resid="ContextualMenuTitle" />
          <Description resid="ContextualMenuTitleDesc" />
      </Supertip>
    </Control>         
  </OfficeMenu>
</ExtensionPoint>

Когда я пытаюсь проверить файл манифеста с помощью этого инструмента , он говорит мне, что мне не хватает элемента Icon, но я ненужно изображение для контекстного меню?

Возможно ли то, что я пытаюсь сделать, и если да, то может ли кто-нибудь указать мне пример?


Редактировать:

Я обновил свой код, чтобы отразить то, что написал @Mavi Domates

<ExtensionPoint xsi:type="ContextMenu">
  <OfficeMenu id="ContextMenuText">
    <Control xsi:type="Button" id="openSearchButton">
      <Label resid="openSearchButtonLabel" />
      <Supertip>
        <Title resid="openSearchButtonTitle" />
        <Description resid="openSearchButtonDescription" />
      </Supertip>
      <Icon>
        <bt:Image size="16" resid="Contoso.tpicon_16x16" />
        <bt:Image size="32" resid="Contoso.tpicon_32x32" />
        <bt:Image size="80" resid="Contoso.tpicon_80x80" />
      </Icon>
      <Action xsi:type="ExecuteFunction">
        <FunctionName>getData</FunctionName>
      </Action>
    </Control>
  </OfficeMenu>
</ExtensionPoint>

Когда я добавляю этот код (прямо под значением по умолчанию <ExtensionPoint xsi:type="PrimaryCommandSurface">) Моя надстройка больше не отображается в «Моем дополнении».ins ". Я загрузил Microsoft средство проверки манифеста , и оно говорит мне, что мой манифест в порядке.

Я сузил его до узла Control, вызывающего проблему. Если я просто добавлю:

<ExtensionPoint xsi:type="ContextMenu">
  <OfficeMenu id="ContextMenuText">
  </OfficeMenu>
</ExtensionPoint>

моя надстройка по-прежнему отображается в меню. Я также добавил соответствующие строки в мои ресурсы в <bt:ShortStrings>:

<bt:String id="openSearchButtonLabel" DefaultValue="Check it out!" />
<bt:String id="openSearchButtonTitle" DefaultValue="Hover over me" />
<bt:String id="openSearchButtonDescription" DefaultValue="For more info go here" />

Мой код выглядит точно так же, как и документация.Я не уверен, куда идти отсюда.Я на Mac, если это что-то меняет.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

У меня была такая же проблема.Решено сейчас.Ваш код просто идеален.Просто вам нужно запустить сервер перед загрузкой.Если вы создали свою надстройку, используя офис-генератор.Затем 1. запустите вашу надстройку, запустив «npm start» 2. Теперь загрузите ее, запустив «npm run sideload» в отдельном терминале.Это решило мою проблему и, надеюсь, решит и вашу.

0 голосов
/ 19 декабря 2018

То, что вы пытаетесь сделать, возможно, и вы очень близки к этому:)

Вы выбрали свой элемент управления ContextMenu для типа Menu, а не Button.Это означает, что вам нужны элементы управления подменю.

Из документации здесь: https://docs.microsoft.com/en-us/office/dev/add-ins/develop/create-addin-commands#step-7-add-the-resources-element

Каждая группа требует как минимум один элемент управления.Элементом управления может быть кнопка или меню.Используйте Меню, чтобы указать раскрывающийся список элементов управления кнопки.В настоящее время поддерживаются только кнопки и меню.Дополнительные сведения см. В разделах «Элементы управления кнопками» и «Элементы управления меню».

Это означает, что если вы хотите иметь вложенные меню, ваш манифест верен и вам просто нужно добавить элементы + значки.Ниже вы можете увидеть пример кода, который открывает панель задач или выполняет функцию в зависимости от того, какое подменю вы щелкаете.

<ExtensionPoint xsi:type="ContextMenu">
  <OfficeMenu id="ContextMenuText">
    <Control xsi:type="Menu" id="TestMenu">
      <Label resid="ContextMenuLabel" />
      <Supertip>
          <Title resid="ContextualMenuTitle" />
          <Description resid="ContextualMenuTitleDesc" />
      </Supertip>
      <Icon>
         <bt:Image size="16" resid="your_icon_16"/>
         <bt:Image size="32" resid="your_icon_32"/>
         <bt:Image size="64" resid="your_icon_64"/>
         <bt:Image size="80" resid="_icon_80"/>
      </Icon>
      <!-- Add your context sub-menu items -->
      <Items>
         <Item id="contextitem1">
            <Label resid="somecontextlabel1"/>
            <Supertip>
                <Title resid="somecontexttitle1"/>
                <Description resid="somedescription1"/>
            </Supertip>
            <Icon>
                <bt:Image size="16" resid="someimage16"/>
                <bt:Image size="32" resid="someimage32"/>
                <bt:Image size="64" resid="someimage64"/>
                <bt:Image size="80" resid="someimage80"/>
            </Icon>
            <Action xsi:type="ShowTaskpane">
                <TaskpaneId>Mysupertaskpane1</TaskpaneId>
                <SourceLocation resid="TaskPaneSourceLocation1"/>
            </Action>
        </Item>

        <Item id="contextitem2">
            <Label resid="somecontextlabel2"/>
            <Supertip>
                <Title resid="somecontexttitle2"/>
                <Description resid="somedescription2"/>
            </Supertip>
            <Icon>
                <bt:Image size="16" resid="someimage16"/>
                <bt:Image size="32" resid="someimage32"/>
                <bt:Image size="64" resid="someimage64"/>
                <bt:Image size="80" resid="someimage80"/>
            </Icon>
            <Action xsi:type="ExecuteFunction">
                <FunctionName>dosomejsmagic</FunctionName>
            </Action>
        </Item>
      </Items>
    </Control>         
  </OfficeMenu>
</ExtensionPoint>

Если это не так, и вы ищете только Button(поэтому нет подменю) - тогда вы можете использовать это в качестве примера см. тип управления теперь установлен на кнопку

<ExtensionPoint xsi:type="ContextMenu">
    <OfficeMenu id="ContextMenuText">
        <Control xsi:type="Button" id="Button1Id1">
            <Label resid="residLabel" />
            <Tooltip resid="residToolTip" />
            <Supertip>
                <Title resid="residLabel" />
                <Description resid="residToolTip" />
            </Supertip>
            <Icon>
                <bt:Image size="16" resid="icon1_32x32" />
                <bt:Image size="32" resid="icon1_32x32" />
                <bt:Image size="80" resid="icon1_32x32" />
            </Icon>
            <Action xsi:type="ExecuteFunction">
                <FunctionName>getData</FunctionName>
            </Action>
        </Control>
    </OfficeMenu>
</ExtensionPoint>
...