からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

Microsoft Graph を使って Excel のサーバーサイド オートメーションを実現する

みんな大好き Excel ということで、Excel のサーバーサイド オートメーションは、昔から様々な手法によって実現されてきました。サポートされない (意味深) *1 方法であったり、サードパーティの製品に頼らなければいけなかったのですが、現在では Microsoft Graph を使うことで、サーバーサイドで Excel を作成することができるようになりました。

やりたいことをざっくりとまとめると以下のような感じになります。

  • Excel のテンプレートを SharePoint サイトの任意の場所に置く
  • Excel のテンプレートをコピーする
  • コピーしたファイルに値を書き込む
  • 書き込んだファイルをダウンロードする (Azure Blob Storage などに保存する)

手順

具体的に API を見ながら実装方法を確認します。

Excel のテンプレートを SharePoint サイトの任意の場所に置く

これは自動化する必要はないので手動でやればいいですね。もしテンプレートの自動更新のようなことを行いたい場合はファイルのアップロードができます。

docs.microsoft.com
docs.microsoft.com

Excel のテンプレートをコピーする

ファイルのコピーは copy メソッドを使います。コピーは driveId を指定できるので、SharePoint サイト間や SharePoint から OneDrive for Bussiness へのコピーも行うことができます。

docs.microsoft.com

コピーしたファイルに値を書き込む

セルに値を書き込むには range に対して PATCH 要求を実行します。値を設定できるほか、数式や書式を設定することもできます。値は二次元配列で指定するのがミソです。

docs.microsoft.com

また、大量の値を書き込む場合は、パフォーマンスを向上させるためにセッションを使うのがいいでしょう。

docs.microsoft.com

書き込んだファイルをダウンロードする

作成したファイルは content プロパティでダウンロードできます。GET 要求を投げるとダウンロードのための一時的な URL にリダイレクトされ、そこからファイルをダウンロードできるようになります。

docs.microsoft.com

まとめ

今回はファイル操作と Excel 操作だけでしたが、例えば申請書の宛先に上司の名前を自動的に設定するために manager を使ったり、作ったファイルをダウンロードせずに URL をメールで送ったり、いろいろなバリエーションが考えられると思います。ぜひ Microsoft Graph を使って自由なプログラミングを体感していただければと思います。