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関連

    Google Docs APIを使ってGoogle ドキュメントを操作するVBAマクロ

    前回の記事で新しく追加されたGoogle Docs APIを紹介しまし…

  2. Office関連

    PDFのしおり情報を出力するVBAマクロ

    Acrobatフォーラムの下記スレッドで当ブログへのリンクが貼られてい…

  3. Office関連

    「カレンダーから日付入力」をUserFormに移植してみました。

    前回の記事では、Office 用アプリ「カレンダーから日付入力」と同様…

  4. Office関連

    日本語の文法上の誤りを列挙して修正候補をコメントとして追加するWordマクロ

    前回の記事の関連で、今度は日本語の文法上の誤りを列挙して修正候補をコメ…

  5. アイコン一覧

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

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

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

Translate

最近の記事

アーカイブ

PAGE TOP