💻

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

2022/01/01に公開

はじめに

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

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

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

実行方法

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

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

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

https://docs.microsoft.com/ja-jp/graph/api/driveitem-put-content?WT.mc_id=M365-MVP-5002941

https://docs.microsoft.com/ja-jp/graph/api/driveitem-createuploadsession?WT.mc_id=M365-MVP-5002941

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

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

https://docs.microsoft.com/ja-jp/graph/api/driveitem-copy?WT.mc_id=M365-MVP-5002941

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

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

https://docs.microsoft.com/ja-jp/graph/api/range-update?WT.mc_id=M365-MVP-5002941

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

https://docs.microsoft.com/ja-jp/graph/api/workbook-createsession?WT.mc_id=M365-MVP-5002941

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

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

https://docs.microsoft.com/ja-jp/graph/api/driveitem-get-content?WT.mc_id=M365-MVP-5002941

おわりに

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

Discussion