TL;DR
Power Automate の「スクリプトの実行」アクションには 場所(source)・ドキュメント ライブラリ(drive)・ファイル(file) という3つの必須パラメーターがあります。通常はドロップダウンから選択しますが、複数ファイルに対して動的に処理を回したい場合、これをテキスト情報(サイトURL・フォルダーパスなど)から組み立てる方法がどこにも載っていませんでした。
結論から言うと、
-
場所(source) は SharePoint への HTTP 要求 アクションで_api/siteを叩いてGroupIdを取得しgroups/と連結 -
ドキュメント ライブラリ(drive) とファイル(file) は ファイルの取得(プロパティのみ) アクションの出力にある{DriveId}/{DriveItemId}を使う
ことで解決できました。
前提・環境
- Power Automate クラウドフロー
- SharePoint に格納された Excel ファイルに対して、Office スクリプト(GetSheetData など)を実行
- 対象ファイルは1つではなく、SharePoint 上の Excel テーブル(一覧)に登録された複数ファイル
- テーブルには各ファイルの「サイトURL」「フォルダーパス」などがテキストで格納されている
やりたかったこと
「スクリプトの実行」アクションを手動でGUI設定すると、場所 → ドキュメント ライブラリ → ファイル の順にドロップダウンで選択する仕組みになっています。しかし今回は、Excel テーブルの行(サイトURL・フォルダーパスなど)をApply to eachで回しながら、対象ファイルを動的に切り替えて同じスクリプトを実行したいという要件でした。
つまづいたポイント
「スクリプトの実行」アクションの 場所・ドキュメント ライブラリ・ファイル は、UI上はドロップダウンですが、実体は以下のような値です。
| パラメーター | 実体 |
|---|---|
| 場所(source) |
groups/{GroupId} の形式 |
| ドキュメント ライブラリ(drive) | Drive ID (b!... から始まる文字列) |
| ファイル(file) | Drive Item ID |
これを「サイトURL」「フォルダーパス」というテキスト情報だけから、どうやって導き出せばいいのかが全く分かりませんでした。公式ドキュメントにもこの変換方法は明記されておらず、かなり時間を溶かしました。
試したこと
- ドロップダウンの中身を式(fx)に切り替えて、直接値をハードコードしてみる → 動くには動くが動的にできない
- SharePoint コネクタの標準アクション(ファイルの一覧表示など)の出力を眺めて、それらしいIDを探す → 断片的にしか出ておらず確証が持てない
- 最終的に、SharePoint REST API を HTTP要求の送信 アクション経由で直接叩いて、必要な情報を狙って取得する方針に切り替え
解決方法
1. 場所(source)の取得
「HTTP 要求の送信」アクションで、対象サイトの GroupId を取得します。
- メソッド:
GET - URI:
[サイトURL]/_api/site - ヘッダー:
Accept: application/json;odata=verbose
レスポンスの d.GroupId を使って、以下の式で source パラメーターに渡す値を組み立てます。
concat('groups/', body('SharePoint_に_HTTP_要求を送る')['d']['GroupId'])
「変数を初期化する」アクションでオブジェクト型を使います。実業務でSharePoint上のExcelテーブルを参照したときループ内の1回に取り出すデータ フォーマットを再現しています。

{
"SharepointSite": "<サイトURL>",
"drivename":"ドキュメント",
"folder":"/Shared Documents/<Folder>/<Path>",
"filename": "<Filename>"
}
「Sharepoint に HTTP要求 を送る」アクションでサイトのアドレスに、前述の SharepointSite の値を使っています。

出力結果を表示すると GroupId を見つけることができます。

2. ドキュメント ライブラリ(drive)・ファイル(file)の取得
「ファイルの取得(プロパティのみ)」アクションを使います。
| フィールド | 設定値 |
|---|---|
| サイトのアドレス | サイトURL(Excelテーブルの値) |
| ライブラリ名 | 対象ライブラリ名 (今回は「ドキュメント」固定) |
| フィルター クエリ | substringof('絞り込みたい文字列', FileLeafRef) |
| エントリをフォルダーに制限する | フォルダーパス(Excelテーブルの値) |
このアクションの出力には、通常のファイルプロパティに加えて {DriveId} と {DriveItemId} という項目が含まれています。これがまさに「スクリプトの実行」が要求している drive と file の実体でした。
outputs('ファイルの取得_(プロパティのみ)')?['body/value'][0]['{DriveId}']
outputs('ファイルの取得_(プロパティのみ)')?['body/value'][0]['{DriveItemId}']
これらを「スクリプトの実行」アクションの ドキュメント ライブラリ ファイル パラメーターにそれぞれ式として設定すれば、動的に対象ファイルを切り替えながらスクリプトを実行できるようになります。
余談ですが、ファイルの取得_(プロパティのみ)の戻り値は配列です。また複数ファイル該当する場合があるため、そもそも条件に合致するファイルが存在するか、目的のファイルであるかを判定するアクションが別途必要になるでしょう。今回は事前に1つしかないことがわかっているため[0]を指定してアクションを省略しています。
そもそもファイル名を変数に設定していれば フィルター クエリで、FileLeafRef eq 'hogehoge.xlsm'といった指定が確実です。ご参考までに。
最終的に通ったテストフロー
まとめ
- 「スクリプトの実行」アクションのパラメーターは、GUIのドロップダウンの裏側では
GroupId/DriveId/DriveItemIdという具体的なIDで構成されている -
GroupIdは SharePoint REST API (_api/site) を HTTP要求アクションで叩いて取得する -
DriveId/DriveItemIdは「ファイルの取得(プロパティのみ)」アクションの出力に、通常のプロパティとは別枠で含まれている({DriveId}{DriveItemId}) - この2アクションを組み合わせれば、サイトURL・フォルダーパスといったテキスト情報だけから「スクリプトの実行」の必須パラメーターを完全に動的に組み立てられる
同じところで詰まっている方の参考になれば幸いです。
※本記事の構成検討・文章のドラフト作成にあたり、AI(Claude)のサポートを受けています。技術的な調査・検証は筆者自身によるものです。


