Microsoft Word加载项-添加到上下文菜单

时间:2018-12-19 03:49:02

标签: ms-word office-js

我已经建立了一个Word加载项,现在想添加一个选项,当用户突出显示一个单词并右键单击它时,可以从中调用函数。我已经找到了有关如何修改manifest.xml文件的文档here,但似乎没有显示如何添加到上下文菜单的完整示例,仅显示了如何添加按钮和下拉菜单的完整示例。 / p>

文档还使我指向github页的显示示例,但又缺少上下文菜单之一。它还指向this视频,该视频似乎在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>

当我尝试使用this tool验证清单文件时,它告诉我缺少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">的正下方,我的加载项不再显示在“我的加载项”菜单中。我下载了Microsoft的manifest validator,它告诉了我我的清单很好。

我将其范围缩小到了引起问题的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 :(得分:1)

您正在尝试做的事情是可能的,并且您非常接近它:)

您已选择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(因此没有子菜单),那么您可以以此为例,现在将控件类型设置为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>

答案 1 :(得分:0)

我遇到了同样的问题。现在解决。您的代码是完美的。只是您需要在侧载之前启动服务器。如果您是使用office-generator创建的。然后 1.通过运行“ npm start”启动加载项 2.现在在单独的终端中以“ npm run sideload”运行它的侧载。 这解决了我的问题,希望也能解决您的问题。