※記事中でも書いていますが、本記事はPower AutomateのフローからOffice Scriptsのスクリプトにパラメーターを渡す方法が分からなかったときに書いたものです。スクリプトのAPIモデルも古いままになっていますが、一つの参考情報として、当時のまま記事を残しておくことにします。
先日書いた下記記事で、Power AutomateからOffice Scriptsのスクリプトが実行できることを確認しました。
このときに思ったのが、“パラメーターを指定してスクリプトを実行したい”ということ。
単に作成済みのスクリプトを実行するだけでなく、Power Automate側から何らかのパラメーターを与えられれば、活用できる場が広がりそうです。
コードのプレビューから「スクリプトの実行」コードを見てみると、下記のように「ScriptParameters」オプションが用意されていることが分かります。
恐らくこのオプションを使ってスクリプト実行時のパラメーターを指定できるのではないかと思うのですが、現時点では、画面上からそのオプションを指定する方法が分かりません。
{ "inputs": { "host": { "connectionName": "shared_excelonlinebusiness", "operationId": "RunScriptProd", "apiId": "/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness" }, "parameters": { "source": "me", "drive": "*****", "file": "*****", "scriptId": "ms-officescript%3A%2F%2Fonedrive_business_itemlink%2F*****", "ScriptParameters": {} }, "authentication": { "type": "Raw", "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" } }, "metadata": { "*****": "/Office Scripts with Power Automate.xlsx", "tableId": null } }
仕方がないので、Office Scriptsのスクリプトそのものを書き換える方法を模索することにしました。
2020/5/27 追記:
パラメーターの受け渡し方法が分かったので別途記事を書きました。
元のスクリプトと実行するスクリプトの準備
上記「スクリプトの実行」コードを見る限り、「file」や「scriptId」で実行するスクリプトを指定していることから、動的に作成したスクリプトを実行するものではなく、あくまでも“既存のスクリプト”を実行するアクションであると推測できます。
そのため、下記のようにPower Automateで実行するスクリプトを事前に作成しておいて、その内容を動的に書き換える方法を試すことにしました。
- 元となるスクリプトと実行するスクリプトを用意
- 元となるスクリプトのコードの必要な部分を書き換え、実行するスクリプトとして上書き保存
- 手順2.のスクリプトを実行
元ファイル.osts
元となるスクリプトは下記になります。
Sheet1のセルA1に文字列を書き込むコードで、書き込む値を「{XXX}」とし、この部分を置換します。
async function main(context: Excel.RequestContext) { let sheet = context.workbook.worksheets.getItemOrNullObject("Sheet1"); await context.sync(); if (!sheet.isNullObject) { sheet.getRange("A1").values = [["{XXX}"]]; } }
Power Automateからスクリプトを書き換えて実行.osts
実行するスクリプトは下記になります。
こちらは後ですべて書き換わることになるので、ある意味どうでも良い内容です。
async function main(context: Excel.RequestContext) { // Your code here }
Office Scriptsスクリプトを動的に書き換えて実行するフロー
準備ができたので、いよいよフローを作成します。
- 「ファイル コンテンツの取得」でOneDrive上のスクリプトファイル(元ファイル.osts)を取得します。
- 「ファイルの作成」で実行するスクリプトをOneDrive上に作成します。
- スクリプトの実行で手順2.のスクリプトを実行します。
フロー内容は上記の通りで、手順2.でスクリプトファイルを作成する際、replace関数で文字列の置換を行います。
replace(string(outputs('ファイル_コンテンツの取得')?['body']), '{XXX}', 'こんにちは、世界!')
実行結果
実行結果は下図の通りで、意図した通りに動いてくれました。
以上のように、Office Scriptsのスクリプトファイル(この記事で書いた通り、ostsはJSON形式のテキストファイル)を動的に書き換えるフローを実行できましたが、Power Automateに詳しい方であれば、もっとスマートに処理できるかもしれません。
また、Microsoftさんのことなので、今後はPower Automateのコネクタやテンプレートもより充実させてくれるはずです!
(たぶん、きっと・・・)
これからの成長が楽しみなOffice ScriptsとPower Automateの連携、興味がある方は是非お試しください!!
この記事へのコメントはありません。