はじめに
TIPSこの記事は、Microsoft Power Automate – Qiita Advent Calendar 2025 シリーズ2 12月17日 担当分の記事です。
今回はクラウドフローでよく利用するSharePointとExcel Onlineコネクタで ライブラリに配置しているファイルを取得したり、更新したりする際にライブラリが動的に変更される場合でも対応できる方法をご紹介します。
Excel Onlineコネクタでライブラリを動的に指定する際にはライブラリの「ドライブID」なるものの情報が必要となります。これを取得するのに結構手間がかかるんですが、実装すれば動的な指定が可能となります。有償ライセンス範囲のGraph APIを使用した方法もありますが、今回はBasicライセンス範囲で可能なSharePoint REST APIを使った方法をご紹介します。
ライブラリのドライブID取得の流れ
本記事では以下のような流れでドライブIDを取っています。
※Graph API版やSharePointの場合でもほかにも効率的なものがあったらご容赦ください。
- サイトURLからサイトIDを取得 (REST API)
- サイトIDを使ってリストのドライブ一覧のnameとidを取得(REST API)
- 一覧からnameがライブラリの表示名と一致するものをフィルターしDriveIDを取得
- おまけ:ライブラリ表示名からパスで指定する内部名を取得(ドキュメント→Shared Documents)※パスでのファイルコンテンツ取得で利用しています。同一だったり固定でわかるならこの部分はなくてもよい
- パスによるファイルコンテンツのメタデータ取得でファイルのidを取得 (Excel Onlineのファイル指定に利用)
上記で集まった情報をもとにExcel Onlineのファイルからテーブル情報を取得
・場所: サイトのURL ※サイトIDも使えますがURLで行けるのでこっちでOK
・ライブラリ:取得したライブラリのドライブIDを指定!ここがポイント!
・ファイル :ファイルのidを指定
・テーブル :※テーブル一覧から抽出して指定も可能だがサンプルなので固定でテーブル名を指定
TIPSテーブルのデータを更新する場合は動的な指定のため、通常のように存在する列は表示されません!
更新する場合はJSON形式(列:値) で書きます。
全体の流れ(クラシック表示)
サンプルなので、わかりやすく取得した値を作成アクションなどに入れてますが、そのまま次に使っても大丈夫です。



サイトID取得部分
最初にサイトIDの取得部分です。
SharePointのREST APIアクションで以下のように指定します。
サイトのアドレスはサイトURL指定、方法はGETです。URIがポイントで以下となります。
→v2.1を利用して取得となります。
CodeURI:
/_api/v2.1/sites/root

以下のような結果が取れます。ここからidを抽出します。
@{body(‘SharePoint_にHTTP要求を送信します_サイトID’)?[‘id’]}

サイトIDはあまり見ない形式で以下のようになっています。ホスト部分とGUID,GUIDの形式
XXXXXXXXX.sharepoint.com,cf114f4a-bcd3-4e4d-XXXX-0ee7f55fa187,02d0a33c-XXXX-468e-ac96-aeaf465ada44
ライブラリID取得部分
NOTEここで一発で取れる方法もあるはずなんですが、一部のライブラリでこのようにいったんドライブ一覧を抽出してから名前一致で取らないと取れないケースがあったため、外人さんの記事をググり以下のようにしています。ひと手間入りますが確実だったのでこの方法で自分はとっています。
先ほど取得したサイトIDを使用してドライブ一覧(ライブラリの一覧)を取ります(nameとidのみselect)
サイトのアドレスは同じくサイトURL(サイトIDでもOK)、方法はGETです。
CodeURI:
_api/v2.1/sites/@{outputs(‘作成_サイトID’)}/drives?$select=name,id

そうすると以下のような出力が取れます。ここでやっと必要なドライブIDが取れます!
ちなみにドライブIDはGUID形式などではなく以下のような書式になっています。ぱっと見こういうのがドライブIDなんだなと思っていただければと。
CodeドライブIDのサンプル:以下のようにb!などから始まる文字列。GUID形式とは全く異なる
b!Sk8Rz9O8TU6q5Q7n9V-hhzyXXXXXXXXXX0Za2kQLbfqAwsExTZClxFm0jwcU

次にフィルターアクションでライブラリの表示名と一致するレコードを取得します。
CodeFROM:
@body(‘SharePoint_に_HTTP_要求を送信します_ListDriveID’)?[‘value’]
@item()[‘name’] 次の値に等しい @variables(‘ライブラリ名’)
次の作成アクションで取得したうちの最初の1件に絞ってドライブIDのみを保持しています
Code@{first(body(‘アレイのフィルター処理’))?[‘id’]}

リスト内部名(パス)の取得とファイル取得
この部分ではファイルをパスで取得するためにライブラリの表示名からパス部分を取っています。
ドキュメント→Shared Documents を取得。その次のパスによるファイルの取得で利用するためです。
この部分については、ファイルを作成するケースの場合はそこからファイルのidも取れますので、必要に応じてという感じです。表示名とパスが同じ場合もRestでのname取得は不要です。
また、今回はサンプルなのでファイル名は固定で定義しています。本来はこちらも動的な値として変数などで指定する感じだと思います。
ともあれ、以下のような感じで対象のエクセルファイルまでは取れました。ここでとったエクセルファイルのidを次のExcel OnlineでのファイルIDに使用します。
Code_api/v2.1/sites/@{outputs(‘作成_サイトID’)}/lists/@{variables(‘ライブラリ名’)}
作成 リストName:
@{body(‘SharePoint_に_HTTP_要求を送信します_ListName’)?[‘name’]}
パスによるファイル メタデータの取得 ファイル:
/@{outputs(‘作成_リストName’)}/サンプル.xlsx


Excel Online アクションでのライブラリをドライブIDで動的指定!
いよいよですが、ここでライブラリのドライブIDを使用します!ドキュメントライブラリに指定する値ですね。
ここがSharePointと同じくリストのパスやIDで行けるのなら楽なのですが、ドライブIDが必要となるためこのような手間をかけてますw
- 場所:サイトURL(サイトIDでもOK)
- ドキュメントライブラリ: @outputs(‘作成_リストDriveID’) →頑張って取ったドライブID
- ファイル:@outputs(‘パスによるファイル_メタデータの取得_ファイル’)?[‘body/Id’]
- テーブル:サンプルなので固定値で指定(テーブル名が分かっているならこれでOK)

ちなみにサンプルファイルのテーブルは以下(テーブル名:テーブル1)

実行すると以下のようにテーブルの情報が取得できています!やりましたね!

ファイルデータの更新の場合
同じようにファイルのテーブルデータの更新ですが、動的に指定しているので、JSON形式で更新や追加する値を指定します。(ファイルを動的に作成した場合も同様ですが)
以下はファイルの更新の場合のサンプルです。動的な指定の場合は、「項目のプロパティを指定する」という欄が出てくるので、そこに{“列名1”:”値1” , “列名2”:”値2″・・・} という感じでJSON形式で指定してあげます。
以下はサンプルなので指定している値はべた書きですが、通常は変数やループ中の値などを設定するイメージです。

こちらも実行すると対象ファイルのテーブルの指定列が指定した値で更新されています。

おわりに
長くなりましたが、お伝えしたい内容としてはExcel Onlineのアクションで動的なライブラリ指定が(ちょっと面倒ですが)このようにやればできますよ。という内容です。
固定のサイト、ライブラリであれば通常通りプルダウンから指定する実装でよいのですが、複数のサイトやライブラリで利用したり、汎用的なフローとして配布する際など、サイトURLやライブラリ名だけ変更すれば利用できるフローを作成する。など活用の幅は多くあると思います。
動的な指定を行うと動的コンテンツに列の候補が出てくれない(ので内部名を式で直書き)、JSONで更新書かなければいけない。などワンランク上がる実装とはなってしまいますが、やればできる。ということですね。
企業、チームでの利用についてはまわりのレベル感やこの実装の必要度合いなどでご検討いただければと思います。それでは!
関連記事
はじめに TIPSこの記事は、Microsoft Power Automate - Qiita Advent Calendar 2025 シリーズ2 12月18日 担当分の記事です。 以前の記事で「Power Automate Dataverseコネクタ 」のシリーズを書いていました。今回...
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。

コメント