2021年1月から、Office Script からの外部API利用がサポートされるようになったので、試してみました。
公式のアナウンスは下記を参照してください。
注意事項にも書かれていますが、外部APIを利用する場合には fetch API というものを使います。
この特性上、スクリプトは以下のような形式にしておく必要があります。
async function main(workbook: ExcelScript.Workbook): Promise <void> { //何らかの処理 let fetchResult = await fetch(.....); }
ポイントは async
と Promise <void>
と await
です。どれを入れ忘れてもスクリプトでエラーになるので、注意しましょう。また、fetch API を利用する場合には Power Automate からスクリプトを呼び出すことはできません。
さて、fetch API を利用する場合ですが、サンプルを見ると単に await fetch('https://jsonplaceholder.typicode.com/todos/1');
となっているので、GETしかできないのかな?と思うかもしれません。
実際には fetch API は下記ドキュメントにあるとおり、一通りのAPI呼び出しに必要な要素を指定可能です。 (method, header, body)
以下ではこの例にならって Power Automate にデータを送信する場合のサンプルを見ていきます。
Office Script からのフロー呼び出し
Power Automate のフローを呼び出す場合には、フロー側はHTTPリクエスト受信時のトリガーになっている必要があります。
このトリガーは有償(PREMIUM) に分類されるので、Logic Apps を利用してもいいかもしれません。
フローで気を付けなければいけないのは、必ずレスポンスでデータを返すことです。これを入れないとたとえリクエストが送られていてもScript側で「Fetchが失敗しました」と出てしまいます。
ここまで準備できたらあとは fetch API を利用した Scriptを書くだけです。
async function main(workbook: ExcelScript.Workbook): Promise<void> { // Your code here const url = `ここにフローのURL`; let textMessage = { text: "Hello World" }; let param = { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(textMessage) }; let fetchResult = await fetch(url, param); let json = await fetchResult.json(); console.log(JSON.stringify(json)); }
これだけで、フローにデータ (JSONオブジェクト) を送信することができます。body
部分を構成する textMessage
をセルの値などに変更すれば、Excel上のデータをPower Automate に渡して処理させることもできます。
以下は単純にB3のセルの値をAutomateに送った場合の動画です。
何やっているんだ状態ですけど、Office ScriptからPower Automateにデータを送ってみました。Fetch API使うと、Office Script主体でAutomateを使えるのでこれはこれで面白そうです。 pic.twitter.com/CEuSSCaVWi
— Hiro (@mofumofu_dance) February 17, 2021
このように非常に簡単な処理で Excel Online 上から、Power Automate/Logic Apps のフローにデータを送信することができました。
おわり
今回は Office Scripts でサポートされた fetch API を利用して、Office Scripts から Power Automate にデータを受け渡すような例をご紹介しました。
注意事項は以下3点です。
- async 処理であることをわすれずに (スクリプトの開始部分)
- API 側は必ずデータを返すようにつくる
- このスクリプトは Power Automate 上では実行不可
普段は Power Automate で使えるスクリプトを考えていましたが、逆パターンというのもなかなか応用が広そうです。
ぜひ新しく追加された fetch API、利用してみてください。