Office アドイン

[Officeアドイン]アドイン コマンド(Add-In Commands)の紹介(2)

昨年末に書いた記事で「アドイン コマンド」を紹介しているのですが、知らないうちにPowerPointも対応していたようなので、さっそく試してみました。

必要な環境

  1. 16.0.6568.2025 以上のバージョンのPowerPoint
  2. 機能を有効化するためのレジストリキー

マニフェストファイル

<?xml version="1.0" encoding="utf-8"?>
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0"
  xmlns:ov="http://schemas.microsoft.com/office/taskpaneappversionoverrides"
  xsi:type="TaskPaneApp">
  <Id>3ed7de23-9a21-4b2a-9205-4a9e515331c0</Id>
  <Version>1.0.0.0</Version>
  <ProviderName>kinuasa</ProviderName>
  <DefaultLocale>ja-JP</DefaultLocale>
  <DisplayName DefaultValue="Sample Command App 01" />
  <Description DefaultValue="Sample Command App Description" />
  <Hosts>
    <Host Name="Presentation" />
  </Hosts>
  <DefaultSettings>
    <SourceLocation DefaultValue="https://localhost/apps/command01.html" />
  </DefaultSettings>
  <Permissions>ReadWriteDocument</Permissions>
  <VersionOverrides xmlns="http://schemas.microsoft.com/office/taskpaneappversionoverrides" xsi:type="VersionOverridesV1_0">
    <Hosts>
      <Host xsi:type="Presentation">
        <DesktopFormFactor>
          <FunctionFile resid="residDesktopFuncUrl" />
          <ExtensionPoint xsi:type="PrimaryCommandSurface">
            <!-- TabAddIns Start -->
            <OfficeTab id="TabAddIns">
              <!-- grpSample Start -->
              <Group id="grpSample">
                <Label resid="residGrpSampleLabel" />
                <Icon>
                  <bt:Image size="16" resid="residIcon16" />
                  <bt:Image size="32" resid="residIcon32" />
                  <bt:Image size="80" resid="residIcon80" />
                </Icon>
                <!-- btnSample Start -->
                <Control xsi:type="Button" id="btnSample">
                  <Label resid="residBtnSampleLabel" />
                  <Supertip>
                    <Title resid="residBtnSampleTitle" />
                    <Description resid="residBtnSampleDesc" />
                  </Supertip>
                  <Icon>
                    <bt:Image size="16" resid="residIcon16" />
                    <bt:Image size="32" resid="residIcon32" />
                    <bt:Image size="80" resid="residIcon80" />
                  </Icon>
                  <Action xsi:type="ShowTaskpane">
                    <SourceLocation resid="residTaskpaneUrl" />
                  </Action>
                </Control>
                <!-- btnSample End -->
                <!-- btnSample2 Start -->
                <Control xsi:type="Button" id="btnSample2">
                  <Label resid="residBtnSampleLabel2" />
                  <Supertip>
                    <Title resid="residBtnSampleTitle2" />
                    <Description resid="residBtnSampleDesc2" />
                  </Supertip>
                  <Icon>
                    <bt:Image size="16" resid="residIcon16" />
                    <bt:Image size="32" resid="residIcon32" />
                    <bt:Image size="80" resid="residIcon80" />
                  </Icon>
                  <Action xsi:type="ExecuteFunction">
                    <FunctionName>btnSample_onAction</FunctionName>
                  </Action>
                </Control>
                <!-- btnSample2 End -->
                <!-- menuSample Start -->
                <Control xsi:type="Menu" id="menuSample">
                  <Label resid="residMenuSampleLabel" />
                  <Supertip>
                    <Title resid="residMenuSampleTitle" />
                    <Description resid="residMenuSampleDesc" />
                  </Supertip>
                  <Icon>
                    <bt:Image size="16" resid="residIcon16" />
                    <bt:Image size="32" resid="residIcon32" />
                    <bt:Image size="80" resid="residIcon80" />
                  </Icon>
                  <Items>
                    <!-- itmSample Start -->
                    <Item id="itmSample">
                      <Label resid="residItmSampleLabel"/>
                      <Supertip>
                        <Title resid="residItmSampleTitle" />
                        <Description resid="residItmSampleDesc" />
                      </Supertip>
                      <Icon>
                        <bt:Image size="16" resid="residIcon16" />
                        <bt:Image size="32" resid="residIcon32" />
                        <bt:Image size="80" resid="residIcon80" />
                      </Icon>
                      <Action xsi:type="ExecuteFunction">
                        <FunctionName>btnSample_onAction</FunctionName>
                      </Action>
                    </Item>
                    <!-- itmSample End -->
                    <!-- itmSample2 Start -->
                    <Item id="itmSample2">
                      <Label resid="residItmSampleLabel2"/>
                      <Supertip>
                        <Title resid="residItmSampleTitle2" />
                        <Description resid="residItmSampleDesc2" />
                      </Supertip>
                      <Icon>
                        <bt:Image size="16" resid="residIcon16" />
                        <bt:Image size="32" resid="residIcon32" />
                        <bt:Image size="80" resid="residIcon80" />
                      </Icon>
                      <Action xsi:type="ExecuteFunction">
                        <FunctionName>btnSample_onAction</FunctionName>
                      </Action>
                    </Item>
                    <!-- itmSample2 End -->
                  </Items>
                </Control>
                <!-- menuSample End -->
              </Group>
              <!-- grpSample End -->
            </OfficeTab>
            <!-- TabAddIns End -->
          </ExtensionPoint>
          
          <ExtensionPoint xsi:type="ContextMenu">
            <!-- ContextMenuText Start -->
            <OfficeMenu id="ContextMenuText">
              <!-- menuSample2 Start -->
              <Control xsi:type="Menu" id="menuSample2">
                <Label resid="residMenuSampleLabel2" />
                <Supertip>
                  <Title resid="residMenuSampleTitle2" />
                  <Description resid="residMenuSampleDesc2" />
                </Supertip>
                <Icon>
                  <bt:Image size="16" resid="residIcon16" />
                  <bt:Image size="32" resid="residIcon32" />
                  <bt:Image size="80" resid="residIcon80" />
                </Icon>
                <Items>
                  <!-- itmSample3 Start -->
                  <Item id="itmSample3">
                    <Label resid="residItmSampleLabel3"/>
                    <Supertip>
                      <Title resid="residItmSampleTitle3" />
                      <Description resid="residItmSampleDesc3" />
                    </Supertip>
                    <Icon>
                      <bt:Image size="16" resid="residIcon16" />
                      <bt:Image size="32" resid="residIcon32" />
                      <bt:Image size="80" resid="residIcon80" />
                    </Icon>
                    <Action xsi:type="ExecuteFunction">
                      <FunctionName>btnSample_onAction</FunctionName>
                    </Action>
                  </Item>
                  <!-- itmSample3 End -->
                  <!-- itmSample4 Start -->
                  <Item id="itmSample4">
                    <Label resid="residItmSampleLabel4"/>
                    <Supertip>
                      <Title resid="residItmSampleTitle4" />
                      <Description resid="residItmSampleDesc4" />
                    </Supertip>
                    <Icon>
                      <bt:Image size="16" resid="residIcon16" />
                      <bt:Image size="32" resid="residIcon32" />
                      <bt:Image size="80" resid="residIcon80" />
                    </Icon>
                    <Action xsi:type="ExecuteFunction">
                      <FunctionName>btnSample_onAction</FunctionName>
                    </Action>
                  </Item>
                  <!-- itmSample4 End -->
                </Items>
              </Control>
              <!-- menuSample2 End -->
            </OfficeMenu>
            <!-- ContextMenuText End -->
          </ExtensionPoint>
        </DesktopFormFactor>
      </Host>
    </Hosts>
    <Resources>
      <bt:Images>
        <bt:Image id="residIcon16" DefaultValue="https://localhost/apps/img/icon16.png" />
        <bt:Image id="residIcon32" DefaultValue="https://localhost/apps/img/icon32.png" />
        <bt:Image id="residIcon80" DefaultValue="https://localhost/apps/img/icon80.png" />
      </bt:Images>
      <bt:Urls>
        <bt:Url id="residDesktopFuncUrl" DefaultValue="http://localhost/apps/func.html" />
        <bt:Url id="residTaskpaneUrl" DefaultValue="http://localhost/apps/command01.html" />
      </bt:Urls>
      <bt:ShortStrings>
        <bt:String id="residGrpSampleLabel" DefaultValue="Sample Group" />
        <bt:String id="residBtnSampleLabel" DefaultValue="Sample Button" />
        <bt:String id="residBtnSampleLabel2" DefaultValue="Sample Button 2" />
        <bt:String id="residMenuSampleLabel" DefaultValue="Sample Menu" />
        <bt:String id="residMenuSampleLabel2" DefaultValue="Sample Menu 2" />
        <bt:String id="residItmSampleLabel" DefaultValue="Sample Menu Item" />
        <bt:String id="residItmSampleLabel2" DefaultValue="Sample Menu Item 2" />
        <bt:String id="residItmSampleLabel3" DefaultValue="Sample Menu Item 3" />
        <bt:String id="residItmSampleLabel4" DefaultValue="Sample Menu Item 4" />
        <bt:String id="residBtnSampleTitle" DefaultValue="Sample Button SuperTip Title" />
        <bt:String id="residBtnSampleTitle2" DefaultValue="Sample Button 2 SuperTip Title" />
        <bt:String id="residMenuSampleTitle" DefaultValue="Sample Menu SuperTip Title" />
        <bt:String id="residMenuSampleTitle2" DefaultValue="Sample Menu 2 SuperTip Title" />
        <bt:String id="residItmSampleTitle" DefaultValue="Sample Menu Item SuperTip Title" />
        <bt:String id="residItmSampleTitle2" DefaultValue="Sample Menu Item 2 SuperTip Title" />
        <bt:String id="residItmSampleTitle3" DefaultValue="Sample Menu Item 3 SuperTip Title" />
        <bt:String id="residItmSampleTitle4" DefaultValue="Sample Menu Item 4 SuperTip Title" />
      </bt:ShortStrings>
      <bt:LongStrings>
        <bt:String id="residBtnSampleDesc" DefaultValue="Sample Button SuperTip Description" />
        <bt:String id="residBtnSampleDesc2" DefaultValue="Sample Button 2 SuperTip Description" />
        <bt:String id="residMenuSampleDesc" DefaultValue="Sample Menu SuperTip Description" />
        <bt:String id="residMenuSampleDesc2" DefaultValue="Sample Menu 2 SuperTip Description" />
        <bt:String id="residItmSampleDesc" DefaultValue="Sample Menu Item SuperTip Description" />
        <bt:String id="residItmSampleDesc2" DefaultValue="Sample Menu Item 2 SuperTip Description" />
        <bt:String id="residItmSampleDesc3" DefaultValue="Sample Menu Item 3 SuperTip Description" />
        <bt:String id="residItmSampleDesc4" DefaultValue="Sample Menu Item 4 SuperTip Description" />
      </bt:LongStrings>
    </Resources>
  </VersionOverrides>
</OfficeApp>

せっかくなので今回はメニュー コントロールやコンテキスト メニューも使っています。
(アドイン コマンドを使えば使うほどコードが長くなってしまうのが鬱陶しいですが、そういう仕様なので仕方ありません・・・。)

command01.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
  <title>Sample</title>
  <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.2.1.min.js"></script>
  <script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
  <script>
    Office.initialize = function(reason){}
    $(function(){
      $("#btnTest").click(function(){
        Office.context.document.setSelectedDataAsync("Hello World.");
      });
    });
  </script>
</head>
<body>
  <h4>Sample Page</h4>
  <input id="btnTest" type="button" value="Test">
</body>
</html>

func.html

<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
<script>
  Office.initialize = function(reason){}
  function btnSample_onAction(event){
    var buttonId = event.source.id;
    Office.context.document.setSelectedDataAsync(buttonId);
    event.completed();
  }
</script>

実行結果

上記アドインを実行した結果が下図になります。

Office_Add-In_Commands_02_01

タブやコンテキスト メニューのカスタマイズを行うと、シームレスにOffice アドインの機能を呼び出せます。

現時点(2016年3月)では実行可能なバージョンに制限があり、使い勝手が良いとは言えない機能ですが、今後Office 2016のシェアが拡大するにつれ、アドイン コマンドを実行できる環境も広がっていくだろうと思います。Office開発者の方は今から要チェックです!

参考資料

特に「Excel、Word および PowerPoint のアドイン コマンド (プレビュー)」と「Excel、Word、および PowerPoint のマニフェストでアドイン コマンドを作成する (プレビュー)」の記事はオススメです。

関連記事

  1. Office関連

    「2014年12月のWindows Update以降コマンドボタンが使えなくなった」トラブルへのFi…

    当ブログでも「KB2553154の更新プログラムをアンインストールする…

  2. Office関連

    VALUE DOMAINで管理しているドメインをOffice 365で使用する。

    Office 365をセットアップすると設定される初期ドメイン「onm…

  3. Office関連

    関数一覧(Excel 2013)

    関数の挿入ダイアログから抽出したExcel 2013の関数情報を表にし…

  4. Office関連

    Office 2013 Consumer Preview(カスタマー プレビュー)をインストールして…

    2012/10/26 追記:RTM版公開に伴い記事を追加しました。…

  5. Office関連

    ドラッグ&ドロップでExcelファイルをアドイン形式(xlam)に一括変換するVBScript

    複数のExcelファイルをアドイン形式(xlam)に変換する必要があっ…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP