Power Automate for DesktopでExcelのテーブルを読み取る
しばらく前のアップデートにより、Excel操作で待望の名前付きセルがサポートされるようになりました。これで念願のテーブルへのアクセスもできるようになるのではと思い、試してみました。
(各画像をクリックすると大きく表示できます)
単純にデータを読み込む
次のようなテーブルを作成します。テーブル名は「Table1」です。
次のようなフローを作成します。
「Excelからワークシートを読み取る」アクションの「取得」に「名前付きセル」を指定します。
「名前」には「Sheet1!Table1[#すべて]」を指定します。「Sheet1!Table1」を指定すればデータ行のみ取得できます。(追記:シート指定は不要でした。後述)
実行すると次の変数が生成されます。
ExcelDataの内容は次の通りです。
列名を読み込む
上の例では、列名が Column1, Column2 のようになってしまい扱いづらいです。テーブルの列が追加や削除されたときにも問題を起こしかねません。
そこで、ひと手間加えて列名を読み込むようにします。
次のようなフローを作成します。
「Excelタークシート内のセルを選択」アクションを使って一旦テーブル全体を選択します。
「選択」には「名前付きセル」を指定します。
「名前」には「Sheet1!Table1[#すべて]」を指定します。
参考までに読み取り処理の例を示します。
For each アクションを使って、ExcelDataをループします。
CurrentItemから列名を使って値を取り出しメッセージを表示します。
値の指定は %CurrentItem['Name']% や %CurrentItem['Amount']% のようにします。
Power Automate for Desktopのデータテーブルがリスト構造なのか配列構造なのか不明です。行の追加削除アクションが用意されているところを見るとリスト構造ではないかと思います。
リスト構造の場合には、上記のように For each で回した方が高速に処理できるはずです。
速度が必要な場合には、両方試して速い方を採用するとよいでしょう。
追記:試したところ、どちらでもほとんど差がありませんでした。
Power Automate for Desktopのデータテーブルはリスト構造か配列構造か?
Power Automate for Desktopでテーブルを扱えるようになったのはとても嬉しいです。これで、わかりやすくなおかつ変更に強いフローを作れるようになります。
シート指定は不要
上の例では Sheet!Table1 とシート指定をしていました。しかし、試したところ、テーブルの場合はシート指定がなくても問題ないことがわかりました。
VBAからは、Worksheets("データ").ListObjects("Tデータ")のように指定するため、ワークシートの指定が必須かと勘違いしていました。
「数式」メニューの「名前の管理」を見ると、テーブル名の範囲(スコープ)は「ブック」のため、シート指定なしでいけるのでしょう。
Power Automate for Desktop: Excelのテーブルに一気に書き込む
コメント
コメントを投稿