skysan's programming notebook

コーディングして思ったことなどを気ままに

小ネタ:Excel JavaScript APIでシート一覧を作ってみた

はじめに

  • 今更Excel JavaScript APIを触ってみたく、Script Labで遊んでみた。
  • どこでも*1動くので、あると便利な機能を実装してみる。

Script Labについて

Microsoftが出しているOfficeアドイン。 https://appsource.microsoft.com/ja/product/office/wa104380862

Office系APIJavaScriptで操作できる。 用途としては、Officeアドインのプロトタイプ開発向けやAPI学習向けなどの記載がある。

企業によってはOfficeアドインの利用が制限されているが、自分の環境ではこのアドインはインポートできた。

個人的にうれしい点

  • Windows, Mac, Webをサポートしているので、大体どこでも動く(脚注1参照)
    • アドイン内で全て完結するので、ソース公開すれば、コピペですぐ動く
  • JavaScript/TypeScriptで動く
    • VBAではない(大事)
  • 作業用ウィンドウで動作するので、サイドパネルとして実行できる
    • 画面はHTML/CSSで作成できる

作ってみた

シート一覧

機能

  • Excelブック内のシート一覧を表示し、選択したシートを表示する
  • シートが更新されたときは更新ボタンで再描画する

ソースコード

解説というか、お作法

  • APIの使い方はクセが強い。アクセスするオブジェクトのAPIリファレンスをよく読む必要がある。
  • Excelのオブジェクトにアクセスするには、context.sync()をコールする必要がある。欲しい情報をload()で設定し、context.sync()をコールする。

参考にした公式サンプル

  • 公式のコードサンプルがあるので、それを組み合わせて簡単にできた。

learn.microsoft.com

スニペットの公開(GitHubアカウント不要)

  • GitHubアカウントがあれば簡単にGistに公開できるが、今回は利用しない。
  • ShareメニューからCopy to clipboard でどこかにエクスポートする。

注意点

  • Script Lab内のソースコードはブラウザキャッシュに保存されているので、そのうち消える。

スニペットのインポート

  • ハンバーガーメニューのImportからGistのURLか上記のYAMLをコピペで読みこむことができる。

注意点

  • GitHubにログインしていないとGistのURLでのimportに失敗する。
    • そのため、未ログインで利用するには、YAMLをそのままコピペするしかない。

所感

  • スニペットを利用する際に都度Importする必要があるが、短期集中利用するものには結構便利。
    • マクロでがっちり作ったアプリなんかは無理そう。
  • Good bye, VBA & VB Editor.
    • Mac版のVB Editorは酷かった (今は知らない。2019年頃の使用感)