通常、Office スクリプトを実行するPower Automateフローを作成者とは別のユーザーで実行すると、エラーが発生して上手くいきません。
どうだろう…Office スクリプト自体も共有はできるけど Power Automate を共有するときに自動的に一緒には共有してくれなさそう https://t.co/2EejzivvMK
— からめも (Takashi Shinohara) (@karamem0) July 7, 2021
この問題を上手く解決する方法をからめもさん( @karamem0 )さんが発見し、ブログ記事で公開してくださいました。
詳細は上記のからめもさんの記事をご参照いただきたいのですが、肝となるのは実行するスクリプトをファイルのIDから生成したスクリプトIDとして指定することで、早い話がアクセス可能であれば任意の場所にあるスクリプトを実行できるというわけですね。
さっそく実際にフローを動かして動作確認してみます。
スクリプトの準備
まずは実行するスクリプトを作成します。
動作確認が目的なので、引数として受け取った値をセルに書き込むだけの簡単なスクリプトです。
function main(workbook: ExcelScript.Workbook, value: string) { workbook.getFirstWorksheet(true).getRange("A1").setValue(value); }
上記スクリプトを「SrcScript.osts」として保存し、OneDrive上の適当なフォルダに移動しました。
作成したスクリプトは通常、OneDrive → ドキュメント → Office Scripts フォルダの中に「osts」ファイルとして保存され、移動してしまうとエディター上で表示されなくなり、「スクリプトの実行」アクションでスクリプトを選択する際にも候補として挙がってこなくなります。
任意の場所にあるスクリプトを実行するPower Automateフロー
スクリプトの準備が出来たら、Power Automateでフローを作成します。
フロー全体
1. パスによるファイル メタデータの取得
「パスによるファイル メタデータの取得」アクションでスクリプトファイル(osts)のIDを取得します。
2. 作成
「作成」アクションで下記式を実行し、取得したファイルIDを元にしてスクリプトIDを生成します。
@{concat(encodeUriComponent('ms-officescript://onedrive_business_itemlink/'), split(outputs('パスによるファイル_メタデータの取得')?['body/Id'], '.')[1])}
3. スクリプトの実行
最後にスクリプトを実行します。
ここでのポイントは「スクリプト」の値を「カスタム値」として、上記アクションで生成したスクリプトIDで指定することです。
また、スクリプトに渡すパラメーターが必要であれば、「ScriptParameters」で指定します。
実行画面
実際にフローを実行したときの画面は下図の通りで、問題無くスクリプトが動作していることが確認できます。
任意の場所にあるスクリプトが実行できるようになったことで、からめもさんがブログで書いているように、作成者でなくてもフローからスクリプトを実行できますし、実際に試してはいませんが動的に作成したスクリプトを実行することもできるでしょう。
からめもさんさん、素晴らしい手法を公開していただき、ありがとうございました!
この記事へのコメントはありません。