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 のマニフェストでアドイン コマンドを作成する (プレビュー)」の記事はオススメです。

オトカドール稼働終了!?前のページ

[Outlook]仕分けルールでスクリプト(マクロ)を実行する。次のページ

関連記事

  1. Office関連

    PHPWordを使ってPHPからWordファイルを出力してみる。

    最近オトカドールやルミティアジュエルやらの記事ばかり書いていますが、今…

  2. Office アドイン

    [Office用アプリ]開発に役立つ資料集

    第一回 Apps for Office 勉強会でも紹介した、Offic…

  3. アイコン一覧

    Office 365アイコン(imageMso)一覧(P)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  4. Office関連

    Microsoft Translator APIで文字列を翻訳するVBAマクロ

    以前書いた記事で、Google翻訳を使って文字列を翻訳するマクロを紹介…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP