特集
» 2016年01月15日 05時00分 公開

Office 2016におけるOfficeアドイン進化のポイント特集:Officeストアで世界に飛び出そう! 最新Officeアプリ開発入門(2/4 ページ)

[国分すばる,著]

Word API v2

 Word 2016でもExcel 2016と同様に、ユーザーのカレントの選択領域に限らず、文書全体にわたって検索と選択をプログラムを使って行い、その領域や文書全体を対象として図やオブジェクト(他のExcelブックの表など)の挿入、テキストや段落のフォーマット、ドキュメントの保存や保存確認などの細かな操作が可能になっている。

 例えば下記のサンプルコードは、ボタンを押すと、文書の末尾に見出しと本文の入った簡単な文書を挿入するものだ。これまでのWordアドインと同様に、OpenXMLのマークアップ自体をあらかじめ用意して挿入することも可能だが、新しいWord APIでは下記のコードのようにstyleプロパティを使って段落の書式設定を意味的に指定できるようになっている。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
  <title></title>
  <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.1.min.js"
      type="text/javascript"></script>
  <script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"
      type="text/javascript"></script>

  <script>
    Office.initialize = function (reason) {
      $(document).ready(function () {
        $('#output-btn').click(insertHeadingAndContents);
      });
      $('#msgline').html('ready !');
    };

    function insertHeadingAndContents() {
      // Wordアプリの参照の取得
      var context = new Word.RequestContext();

      Word.run(function (context) {
        // 文書の最後に見出しを追加
        var heading = context.document.body.insertParagraph(
          '備考',
          Word.InsertLocation.end);
        heading.style = '見出し 1';
  
        // 文書の最後に本文を追加
        var inline = context.document.body.insertParagraph(
          'この文書は、アプリで編集されました',
          Word.InsertLocation.end);
        inline.style = '標準';
        
        // 処理実行
        return context.sync().then(function () {
          $('#msgline').html('done !');
        }, errorHandler);
        
      }).catch(errorHandler);

    }

    function errorHandler(error) {
      $('#msgline').html('Error:' + error);
    };
  </script>
</head>
<body>
  <h1>Word 2016 Sample</h1>
  <div>
    <button id="output-btn">文書の挿入</button>
  </div>
  <p id="msgline" style="background-color:gray;">initializing ...</p>
</body>
</html>

文書末尾に見出しと本文を挿入するWordアドイン

 上記の実行結果は、下図の通りだ。

Wordアドインの実行結果 Wordアドインの実行結果

 テキストボックス、コンボボックスなどの入力用のコンテンツコントロールを挿入したり、挿入したコントロールに対して値や属性を設定したりすることも可能だ。そのため、簡単なフォームを扱った文書作成も、あらかじめテンプレートなどを用意しておく必要なしに、全てプログラミングのみで行える。

旧バージョンへの対応

 新しいAPIを使う上で悩ましいのは、旧バージョンのOffice(Excel、Word)を使っている場合への対応だ。ユーザーが使用しているプラットフォームの情報を取得して、これを基に条件分岐を作成してもよいが、「Excel Online(Web版のExcel)が対応しているか」「iPad版のExcelはどうか」など、各プラットフォームの対応状況に応じてコードを変えるのは現実的ではない。

 こうしたケースに対応するために、新しいAPIには、アドインを実行しようとしているプラットフォームがそのAPIの利用要件を満たしているかを確認する関数が用意されている。下記はこの関数を使って、新しいExcel APIが使えるかどうかを問い合わせるサンプルコードだ。

Office.initialize = function (reason) {
  $(document).ready(function () {
    $('#output-btn').click(function () {
      if (Office.context.requirements.isSetSupported('ExcelApi', '1.1')) {
        addWorksheetAndActivate();
      } else {
        $('#msgline').html('Excel 2016以上を使用してください');
      }
    });
  });
  $('#msgline').html('ready !');
};

APIがサポートされているかを問い合わせるサンプルコード

 なお、Office 2016以上なら後述するアドインコマンド(Add-ins Command。後述)に対応しているため、これと組み合わせることで、Office 2016以上ならコマンドが表示され、Office 2013ならコマンドを表示しないように実装できると思うかもしれない。

 しかし、Office Online、iPad版のOfficeなど、アドインコマンドと新しいAPIの対応状況が全てのプラットフォームで同じだとは限らない。従って、処理の前には必ず上記のような確認用のコードを入れておくのがよい(今後はさらにiPhone、AndroidのExcel、WordでもOfficeアドインが使えるようになるので、確認はさらに大変になるからだ)。

 なお、Office PremiumやOffice 365 SoloからOffice製品をインストールする場合は既に、Office 2016のインストールが既定であり、特別なオプションを選択しないとOffice 2013をインストールできないようになっている。

 このようなOfficeのサブスクリプション化(パッケージの売り切りではなく、購読料を支払って一定期間にわたってアプリを使用するビジネスモデル)が普及することによって、以前のように古いバージョンのOfficeを使い続ける利用者は少なくなっていくことが予想される。このことを考えると、本稿で紹介しているOffice 2016の新機能も意外に早く市民権を得られるようになるのではないだろうか。

Copyright© Digital Advantage Corp. All Rights Reserved.

編集部からのお知らせ

6月16日にフォーマット統一のため利用規約を変更します

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。