Office アドイン

Visio JavaScript APIで遊んでみました。

前回の記事でプレビュー版がリリースされた「Visio JavaScript API」を紹介しましたが、このAPIでどんなことができるのか、軽く遊んでみることにしました。

JavaScriptコード

※ コードの動作手順はこちらの記事をご参照ください。

<script src="https://visioonlineapi.azurewebsites.net/visio.js"></script>
<script>
  document.write("<h4>Visio図形埋め込み</h4>");
  document.write("<input id='fileUrl' type='text' />");
  document.write("<input type='button' value='Init' onclick='btnInit_onClick()' />");
  document.write("<input type='button' value='Zoom' onclick='btnZoom_onClick()' />");
  document.write("<input type='button' value='FitToWindow' onclick='btnFtw_onClick()' />");
  document.write("<input type='button' value='EnumShapes' onclick='btnEnumShapes_onClick()' />");
  document.write("<input type='button' value='Hyperlink' onclick='btnHyperlink_onClick()' />");
  document.write("<div id='iframeHost' />");
  
  //初期化
  function btnInit_onClick(){
    var url = document.getElementById('fileUrl').value;
    if(url){
      //埋め込み用URLに変換
      url = url.replace('action=view', 'action=embedview');
      url = url.replace('action=interactivepreview', 'action=embedview');
      //Visio図形埋め込み
      var session = new OfficeExtension.EmbeddedSession(url,
        {
          id: "embed-iframe",
          container: document.getElementById('iframeHost')
        }
      );
      return session.init().then(function(){
        OfficeExtension.ClientRequestContext._overrideSession = session;
      });
    }
  }
  
  //ズーム設定
  function btnZoom_onClick(){
    Visio.run(function(ctx){
      var activePage = ctx.document.getActivePage();
      activePage.view.zoom = 100;
      return ctx.sync();
    }).catch(function(error){
      alert("Error: " + error);
    });
  }
  
  //ページサイズをウィンドウに合わせる
  function btnFtw_onClick(){
    Visio.run(function(ctx){
      var activePage = ctx.document.getActivePage();
      activePage.view.fitToWindow();
      return ctx.sync();
    }).catch(function(error){
      alert("Error: " + error);
    });
  }
  
  //シェイプ名とテキスト列挙
  function btnEnumShapes_onClick(){
    Visio.run(function(ctx){
      var activePage = ctx.document.getActivePage();
      var shapes = activePage.shapes;
      shapes.load();
      return ctx.sync().then(function(){
        for(var i=0; i<shapes.items.length; i++){
          alert("Name:" + shapes.items[i].name + "\nText:" + shapes.items[i].text);
        }
      });
    }).catch(function(error){
      alert("Error: " + error);
    });
  }
  
  //ハイパーリンク情報取得
  function btnHyperlink_onClick(){
    Visio.run(function(ctx){
      var activePage = ctx.document.getActivePage();
      var shape = activePage.shapes.getItem('コピー機');
      var hyperlink = shape.hyperlinks.getItem(0);
      hyperlink.load();
      return ctx.sync().then(function(){
        alert("Address:" + hyperlink.address + "\nSubAddress:" +  hyperlink.subAddress + "\nDescription:" + hyperlink.description);
      });
    }).catch(function(error){
      alert("Error: " + error);
    });
  }
</script>

実行画面

ウィンドウのズームやシェイプの列挙、ハイパーリンク情報の取得をしてみましたが、この程度であれば問題なく行えるようです。

ただし現時点(2017/2)では、シェイプにイベントを設定したり、動的にシェイプを配置したり、といったことはできないようなので、実用的なAPIになるのはまだまだ先のようです。

参考情報

Visio JavaScript APIの開発者情報がないか調べたところ、Visio MVPであるDavid John Parker氏のブログに分かりやすいまとめが載っていました。

APIの概要や立ち位置、テスト手順まで詳しく書かれているので、Visio / Office 365開発者の方にとってはかなり有益な情報だと思います。

Visio in the Cloud?David Parker

そういったわけで、現時点でできることは非常に限られている「Visio JavaScript API」ですが、今後の機能追加によって、どんどん実用的になっていくはずですので、気になる方は今からチェックしておくことをお薦めします。

Office 365でVisio JavaScript APIsを試してみました。前のページ

MemsourceのバイリンガルMXLIFFファイルから情報を抽出するWordマクロ次のページ

関連記事

  1. Office関連

    [VBA]桁を揃えてDebug.Printする。

    @CallMeKoheiさんのブログの記事に「Excel VBA イミ…

  2. Office関連

    Visio Onlineの機能をJavaScriptで拡張する方法

    @mokudaiさんからのバトンを引き継ぎまして、「Office 36…

  3. Office関連

    CDOを使ってGmail送信を行うVBAマクロ

    「VBA Gmail 送信」といったキーワード検索で、「Gmail A…

  4. Office関連

    パスワードが設定されたファイルを開くPowerPointマクロ

    WordやExcelと違って、PowerPointの場合はOpenメソ…

  5. Office関連

    関数一覧(Excel 2013 Customer Preview)

    関数の挿入ダイアログから抽出したExcel 2013 Customer…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP