Power Automateを使えばSPOやOnDriveで管理されているExcelファイルを開いて内容を読み込むことができます。これによって、Excelで管理している情報に基づいてフローを制御することが可能になります。職場ではPower Automateを用いて業務改善や教育施策のためのプラットフォームづくりをしています。
しかしあれやこれやを自動化しようとしていると、そもそもの「開く」ことが一筋縄では行かないという壁にぶつかることがあります。
そのような「壁」が出現するのはどういうケースでしょうか?
Problem
はじめに一般化していうと「フローを作成している時点ではパスが決まっていないファイル」、言い換えると「アクションの設定画面でプルダウン選択できないファイル」は、普通の方法では開くことができません。
このようなプルダウン選択で選択できないファイルはどういう時に登場するかと言うと、例えば:
- フロー作成時点ではファイルがまだ存在しないケース(ファイルは他のフローやユーザー、O365の別サービスにより後ほど作成される)
- フロー作成時点ですでに存在するが、当該のファイルのパスがフローのトリガーや前段のアクションなどにより動的に決定されるケース
もっと具体的な話をしましょう。以下のようなフローを考えてみてください:
- SPO上のExcelファイルを開き、その中に記載された「処理対象ファイルのパス」の一覧を読み込む
- ループ処理(Apply for each)で「処理対象ファイル」を1つずつ開き、その中に記載された情報を読み込む
- 「処理対象ファイル」の内容を元に何かしらのビジネスロジックを実行する
ステップ1は読み込むファイルが最初から一意に決まっているので(静的に決まっているので)問題ありません。
しかしステップ2はフローを作っている時点ではパスが不明で、実行時に決まるので(動的に決まるので)、編集画面のプルダウンリストから選ぶわけには行きません。
Solution
PowerAutomateで困ったときはたいてい「SharePointにHTTP要求を送信します」か「スクリプトの実行」に頼ることになります。残念ながらこれが現実です。今回は前者で行きましょう。
次に示すように、「SharePointにHTTP要求を送信します」アクションを追加し、その応答に含まれる id
値を利用してファイルを開くようにフローを構成します:
「SharePointにHTTP要求を送信します」の「URI」欄には、 _api/v2.0/drive/root:/
+ ファイル名(トリガーや前段のアクションで得られた値) を指定します。
「ヘッダー」欄には、キーに accept
、値に application/json
と入力します。
「ボディ」欄は空でのままです。
「表内に存在する行を一覧表示」の「ファイル」欄には、以下の式を記載します:
outputs('SharePoint_に_HTTP_要求を送信します')?['body']['id']
outputs()関数の引数は「HTTP要求」アクションの名前次第で変わりますが、それ以外は固定です。
「テーブル」欄には手書きでテーブル名を指定します。
おめでとうございます。
これでプルダウンでは選択できないファイル(動的にパスを指定しなくてはならないファイル)を開いてコンテンツを読み取ることができるようになりました。
今回ご紹介した方法は こちらの記事 を参考にさせていただきました。