【PowerAutomate】フォルダやファイル名を変数指定してExcelを読み込む。ファイル名を検索して選びたい方向け。

スポンサーリンク




作業を自動化する
  • ファイル名で検索してExcelを読み込みたい
  • Excelの読み込みを変数で指定したい

この記事では、そんな方にExcelOnlineを変数で指定する方法を紹介します。

みずしぶき
みずしぶき

この記事を読むと日付の入ったExcelの操作に強くなります。

スポンサーリンク

フォルダとファイル名に変数を使う

例えば「/2022年/管理台帳_202210.xlsx」の場合、

/2022年/管理台帳_202210.xlsx を
/yyyy年/管理台帳_yyyyMM.xlsx の様にしたいと思います。

ファイルの入力内容です。

/@{formatDateTime(triggerOutputs()['headers']['x-ms-user-timestamp'],'yyyy')}年/管理台帳_@{formatDateTime(triggerOutputs()['headers']['x-ms-user-timestamp'],'yyyyMM')}.xlsx

「triggerOutputs()[‘headers’][‘x-ms-user-timestamp’]」はトリガー実行時のタイムスタンプを表しています。
そこからformatDateTimeでyyyyやyyyyMMを指定しています。

2022年10月に実行した場合はこのような結果になります。

formatDateTime(triggerOutputs()['headers']['x-ms-user-timestamp'],'yyyy') ・・2022
formatDateTime(triggerOutputs()['headers']['x-ms-user-timestamp'],'yyyyMM') ・・202210

ファイル名を検索して開きたい場合

例えば「/2022年/管理台帳_202210_v1.0.xlsx」の場合どうしたらいいでしょう。

/2022年/管理台帳_202210_v1.0.xlsx を
/yyyy年/管理台帳_yyyyMM_v1.0.xlsx にしてもNG
これだとv1.0がv1.1に更新された時にファイル名が一致しません。

このようにファイル名に未確定の文字がある場合はやり方を変えます。
「*管理台帳_yyyyMM_*」のような検索ができれば実現できますが、ここではアスタリスクを使った正規表現はできません。

具体的には、Excelを読み込む前に3つの処理を追加します。

  1. 基本情報
  2. ファイル一覧を取得
  3. ファイル名で検索

(1)基本情報

処理のはじめにファイル特定に必要な情報を3つ指定します。

データ操作の「作成」を追加 ※名前は基準日
基準日「2022-10-10T15:32:45.0498960Z」を指定する内容

@{triggerOutputs()['headers']['x-ms-user-timestamp']}

データ操作の「作成」を追加 ※名前は検索するフォルダ
「/Shared Documents/2022年」を指定する内容

/Shared Documents/@{formatDateTime(outputs('基準日'),'yyyy')}年

データ操作の「作成」を追加 ※名前は検索するファイル
「管理台帳_202210」を指定する内容

管理台帳_@{formatDateTime(outputs('基準日'),'yyyyMM')}

(2)ファイル一覧を取得

検索するフォルダをエンコードします。

@encodeUriComponent(outputs('検索するフォルダ'))

エンコードはローマ字や数字以外の文字を%xxの文字に変換する事です。

【エンコード前】/Shared Documents/2022年
【エンコード後】%2FShared+Documents%2F2022%E5%B9%B4

(3)ファイル名で検索

検索ファイル名を含む情報を抽出します。
複数一致した場合は更新日付が最新のファイルを優先します。

データ操作の「アレイのフィルター処理」を追加 ※名前は検索するファイル名でフィルタ
上段

@body('フォルダーの一覧')

下段「詳細設定モードで編集」を押して貼り付ける

@contains(item()?['Name'], outputs('検索するファイル'))

>>アレイのフィルター処理の詳しい使い方

データ操作の「作成」を追加 ※名前は最新のファイル
更新日時でソートして最新の日付のファイルを選択します。

@{last(sort(body('検索するファイル名でフィルタ'),'LastModified'))}

データ操作の「作成」を追加 ※名前はExcel用ファイルパス
ExcelOnlineで読み込むためにファイルパスの前半にあるライブラリ名を切り取ります。※ライブラリ名=/Shared Documentsなど

@{slice(outputs('最新のファイル')?['Path'],nthIndexOf(outputs('最新のファイル')?['Path'],'/',2))}

ここまでの処理でファイル名は特定できたのでExcelを読み込みます。

ExcelOnlineの「表内に存在する行を一覧表示」を追加

@outputs('Excel用ファイルパス')
Tips

Officeスクリプトを使えばPowerAutomateでも正規表現が使用できますが、今回のケースでは使えません。

ちなみにOfficeスクリプトが使えるライセンスはこちらです。

Microsoft 365 Business Standard

Microsoft 365 Apps for business

Microsoft 365 Apps for enterprise

Office 365 E3

Office 365 E5

Office 365 A3

Office 365 A5

https://learn.microsoft.com/ja-JP/microsoft-365/admin/manage/manage-office-scripts-settings?view=o365-worldwide

自分のライセンスの確認方法はマイアカウントから確認してください。

スポンサーリンク

変数でExcelを読み込むテンプレート

最初に全ての情報を指定する方法でフローを作成しました。

この方法のメリットは2つあります。

  • 後から変更がしやすい
  • コピーして使い回しできる

新しいアクションにある「自分のクリップボード」を開いた状態で貼り付けて使ってください。

{"id":"f24e3abc-1242-45bc-b68e-aaaca6e4d62e","brandColor":"#8C3900","connectionReferences":{"shared_excelonlinebusiness":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness/connections/shared-excelonlinebu-b8220908-a67e-44fe-9328-5f0b481a2901"}},"shared_sharepointonline":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/shared-sharepointonl-8883b652-3303-4dbf-8f0d-4b24bd8c03b5"}}},"connectorDisplayName":"制御","icon":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KIDxwYXRoIGQ9Im0wIDBoMzJ2MzJoLTMyeiIgZmlsbD0iIzhDMzkwMCIvPg0KIDxwYXRoIGQ9Im04IDEwaDE2djEyaC0xNnptMTUgMTF2LTEwaC0xNHYxMHptLTItOHY2aC0xMHYtNnptLTEgNXYtNGgtOHY0eiIgZmlsbD0iI2ZmZiIvPg0KPC9zdmc+DQo=","isTrigger":false,"operationName":"スコープ","operationDefinition":{"type":"Scope","actions":{"基本情報":{"type":"Scope","actions":{"基準日":{"type":"Compose","inputs":"@triggerOutputs()['headers']['x-ms-user-timestamp']","runAfter":{},"metadata":{"operationMetadataId":"7ff14003-4a9c-4dbf-9900-ffb103f2fb12"}},"サイトのアドレス":{"type":"Compose","inputs":"","runAfter":{"基準日":["Succeeded"]},"metadata":{"operationMetadataId":"895b17f1-6c7d-403d-b70e-e3857d0d7f04"}},"検索するフォルダ":{"type":"Compose","inputs":"/Shared Documents/@{formatDateTime(outputs('基準日'),'yyyy')}年","runAfter":{"検索するライブラリ":["Succeeded"]},"metadata":{"operationMetadataId":"9448bb00-0fdd-4a44-9cc8-f1b0b9594123"}},"検索するファイル":{"type":"Compose","inputs":"管理台帳_@{formatDateTime(outputs('基準日'),'yyyyMM')}","runAfter":{"検索するフォルダ":["Succeeded"]},"metadata":{"operationMetadataId":"9c421cb4-e9fe-4657-a20c-947e5e36b209"}},"検索するライブラリ":{"type":"Compose","inputs":"ドキュメント","runAfter":{"サイトのアドレス":["Succeeded"]},"metadata":{"operationMetadataId":"033f3499-f00b-4ddd-8c1c-3ab4ddc34c1e"}},"テーブル名":{"type":"Compose","inputs":"テーブル1","runAfter":{"検索するファイル":["Succeeded"]},"metadata":{"operationMetadataId":"6a9c22c5-ccc9-4d1f-a0bc-dfbc726df0fb"}}},"runAfter":{},"metadata":{"operationMetadataId":"b1bbbef2-0009-4ccf-b934-49501c9979d5"}},"Excelの表を取得":{"type":"Scope","actions":{"表内に存在する行を一覧表示":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_excelonlinebusiness","operationId":"GetItems","apiId":"/providers/Microsoft.PowerApps/apis/shared_excelonlinebusiness"},"parameters":{"source":"@outputs('サイトのアドレス')","drive":"@outputs('ライブラリ')","file":"@outputs('Excel用ファイルパス')","table":"@outputs('テーブル名')"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{},"metadata":{"operationMetadataId":"51459adc-8254-4506-8d32-72b3d96dcd26","tableId":"@outputs('テーブル名')"}}},"runAfter":{"ファイルを特定":["Succeeded"]},"metadata":{"operationMetadataId":"e512c382-f46b-47e5-a16a-b011327b7c5a"}},"ドキュメントライブラリを特定":{"type":"Scope","actions":{"ライブラリ名でフィルタ":{"type":"Query","inputs":{"from":"@body('SharePoint_に_HTTP_要求を送信します')?['value']","where":"@equals(item()?['name'], outputs('検索するライブラリ'))"},"runAfter":{"SharePoint_に_HTTP_要求を送信します":["Succeeded"]},"metadata":{"operationMetadataId":"d7f5b82d-2fe8-426c-975e-d4308c7fd7d7"}},"ライブラリ":{"type":"Compose","inputs":"@first(body('ライブラリ名でフィルタ'))?['id']","runAfter":{"ライブラリ名でフィルタ":["Succeeded"]},"metadata":{"operationMetadataId":"4422e5ed-6031-462e-909d-1b1692b501b1"}},"SharePoint_に_HTTP_要求を送信します":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_sharepointonline","operationId":"HttpRequest","apiId":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline"},"parameters":{"dataset":"@outputs('サイトのアドレス')","parameters/method":"GET","parameters/uri":"_api/v2.0/drives/","parameters/headers":{"accept":"application/json"}},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{},"metadata":{"operationMetadataId":"ca31b66b-6d4f-43a1-a6b0-f76f8f0f2cc6"}}},"runAfter":{"基本情報":["Succeeded"]},"metadata":{"operationMetadataId":"5ca49502-d2f5-4eb9-8cbb-08cb2e604a99"}},"ファイルを特定":{"type":"Scope","actions":{"フォルダーの一覧":{"type":"OpenApiConnection","inputs":{"host":{"connectionName":"shared_sharepointonline","operationId":"ListFolder","apiId":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline"},"parameters":{"dataset":"@outputs('サイトのアドレス')","id":"@outputs('検索するフォルダエンコード')"},"authentication":{"type":"Raw","value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']"}},"runAfter":{"検索するフォルダエンコード":["Succeeded"]},"metadata":{"operationMetadataId":"04f16487-80f8-40e7-b575-b95e89f17d38"}},"検索するフォルダエンコード":{"type":"Compose","inputs":"@encodeUriComponent(outputs('検索するフォルダ'))","runAfter":{},"metadata":{"operationMetadataId":"3f7b83ae-ae90-4f3b-86cb-8e88a051a293"}},"検索するファイル名でフィルタ":{"type":"Query","inputs":{"from":"@body('フォルダーの一覧')","where":"@contains(item()?['Name'], outputs('検索するファイル'))"},"runAfter":{"フォルダーの一覧":["Succeeded"]},"metadata":{"operationMetadataId":"c3862cea-f570-42ab-acf6-da6337cf9946"}},"最新のファイル":{"type":"Compose","inputs":"@last(sort(body('検索するファイル名でフィルタ'),'LastModified'))","runAfter":{"検索するファイル名でフィルタ":["Succeeded"]},"metadata":{"operationMetadataId":"1f8c5986-8433-42a9-9853-c729aabd6440"}},"Excel用ファイルパス":{"type":"Compose","inputs":"@slice(outputs('最新のファイル')?['Path'],nthIndexOf(outputs('最新のファイル')?['Path'],'/',2))","runAfter":{"最新のファイル":["Succeeded"]},"description":"ライブラリ部分切り取り","metadata":{"operationMetadataId":"e09a6d74-6d6c-4862-8b10-6e9d2922f81f"}}},"runAfter":{"ドキュメントライブラリを特定":["Succeeded"]},"metadata":{"operationMetadataId":"22c23cab-7020-4cbb-9b19-1ec7cb3e05f8"}}},"runAfter":{},"metadata":{"operationMetadataId":"a5f631b5-9b9b-4fb8-9abd-9e688449bfa7"}}}

上のコードをコピペしたら、読み込みたいExcelに合わせて基本情報にある5箇所設定してください。

  • サイトのアドレス
  • 検索するライブラリ ・・ドキュメントの場合は変更不要
  • 検索するフォルダ
  • 検索するファイル
  • テーブル名     ・・テーブル1の場合は変更不要

他の項目の変更は不要です。
フローを動かすと指定したExcelの表が取得できます。

まとめ

PowerAutomateでExcelOnlineを変数で指定する方法を紹介しました。

ExcelOnlineは使用頻度の高いコネクタなので、変数での指定方法を覚えておくとフロー作りが快適になります。コードのコピペを試して変数での指定方法に慣れておきましょう。

PowerAutomateのおすすめ記事
人気ページ
Apply to eachの使い方
アレイのフィルター処理の使い方
日付関数の使い方
エラーを無視する方法
メールの内容をExcelへ転記
メール本文から名前を抽出

>>PowerAutomateの記事一覧を見る<<

お気に入り必須!公式ページ
Microsoft Power Automate
式関数のリファレンス
コネクタのリファレンス
Excel Online (Business)のリファレンス

最後まで読んで頂き、ありがとうございます。

「この記事が参考になった」「お礼でコーヒー代をプレゼントしよう」という方がいましたらチップ(15円〜)をお願いいたします。

Amazonギフト券- Eメールタイプ - Amazonベーシック

メールのあて先は 「mizusibuki8080@gmail.com」です。
※上記のアドレスは投げ銭受け取り専用です。他のメールは受け取れない設定にしてあるのでご注意ください。

作業を自動化する
ネットワークエンジニアになった人
タイトルとURLをコピーしました