ファイル情報の取得とデータテーブル変数
Power Automate Desktopでは、フォルダーにあるファイルの一覧、既にあるファイルのファイルシステム上での属性を取得することもできます。
ここでは、フォルダーのファイルの一覧をCSVに出力するサンプルを作成します。CSVは横方向にカンマ区切りの項目を並べたものを1行とする複数行で、行と列の構造を持った複数の値をテキストファイルで表現する形式です。
[1]新しいフローを作成します
Power Automate Desktopのトップ画面より[+新しいフロー]をクリックして、適切な名前で新規のフローを[作成]します。
[2]フォルダーの選択ダイアログを表示アクションを配置
[メッセージボックス]アクショングループのフォルダー選択ダイアログを表示アクションを配置します。設定は初期のままで保存します。
[3]フォルダー内のファイルを取得する
[フォルダー]アクショングループの[フォルダー内のファイルを取得]アクションを配置します。
アクションのパラメーター選択画面が開くので、[フォルダー]欄を「%SelectedFolder%」([2]で選択したフォルダー)として保存します。これで指定されたフォルダー配下にあるファイル群を格納したFiles変数が生成されます。
なお、今回は設定を変更しませんが、[>詳細]を開くと、並べ替えのオプションがあり、Files変数の各要素のファイルを名前や最終変更日時などのキーでソートすることも可能です。
[Note]
今回は使用しませんが、[フォルダー内のファイルを取得]アクションで取得したファイルのリストに対して、[ファイルの名前を変更する]アクションで、一括で連番を付けることもできます。
[4]フローを一度実行する
ここで、ツールバーの実行ボタンをクリックして、フローを実行します。フォルダー選択ダイアログが表示されるので、先ほどのサンプルの実行で作成したデスクトップのフォルダーを選択します。
実行が終わったらデザイナーに戻ります。デザイナー画面の変数ペインのFiles変数から右クリックし、表示されたコンテキストメニューから[表示]を選択すると、[変数の値]ダイアログを表示します。
変数ペインで各変数の表示では、実行したときに代入された値が確認できます。変数名の変更や、使用箇所の確認もできます。
[5]ファイルの内容を確認する
[変数の値]ダイアログで、いずれかの要素の[詳細表示]リンクをクリックします。全体が見えるように、ダイアログを広げます。
Filesの各要素は、ファイル型であり、その各プロパティの値が確認できます。さらに、プロパティを持つような型のプロパティである場合[詳細表示]リンクが表示され、値を確認することができます。どのようなデータ型があって、それぞれがどのようなプロパティを持っているかは、ドキュメント「変数のデータ型 - Power Automate | Microsoft Docs」から確認してください。
プロパティは、フローの中でも「変数名.プロパティ名」の形で、参照できます。
変数の値ダイアログを閉じて、デザイナーに戻りましょう。
[Note]
リスト型の変数は複数の値を持つことができます。縦もしくは横のいずれかひとつの方向に並んだ値が保持されるイメージです。これに対して、Excelでテーブルのように縦横両方2つの方向に並んだ値を保持することができるデータテーブル型もあります。
リスト型の変数は作成や要素の追加のアクションが用意されていますが、データテーブルは現時点では直接操作するアクションは用意されていないようです。しかし、[Set Variable(変数の設定)]アクションで、新規に作成したり、既存の値を統合したりすることはできます。また、CSVファイル(後述)があればその内容を読み取りデータテーブル型変数として使用する[CSVを読み取ります]アクションや、Excelブックのシートから範囲のデータを読み取り、データテーブル型変数として使用する[Excelのワークシートから読み取り]アクションがあります。
[6]変数の作成でデータテーブル型の変数を作成する
[フォルダー内のファイルを取得]アクションの下に、[Set Variable(変数の設定)]アクションを配置します。
ここで作成する変数はFilesの各要素のプロパティの値の一覧を格納するデータテーブル型にしたいので、名前をFileTableとします。[設定](変数名)の右側のNewVarをクリックし、編集モードにして、%FileTable%とします。変数名がFileTableになります。
[宛先]には、値を設定します。ここで、「%{[x1,x2,x3],[y1,y2,y3],[z1,z2,z3]}%」のように記述すると、1行目の1列目がx1、2列名がx2、3列名がx3、このとき、1行目が[x1,x2,x3]だということにすると、2行目が[y1,y2,y3]、3行目が[z1,z2,z3]となります。
| x1 | x2 | x3 |
| y1 | y2 | y3 |
| z1 | z2 | z3 |
FileTable変数の1行目は各列の列名としたいので、以下のように入力して保存します。
%{['ファイル名', 'フルパス', '親フォルダー', '拡張子', 'サイズ', '作成日時', '更新日時'] }%
[7]Filesの要素を取り出すループを配置する
次に[ループ]ー[For each]アクションを配置します。
[反復処理を行う値]には「%Files%」と指定して保存します。これで、取得したファイル群をひとつずつ取り出して、CurrentItemループ変数で参照できるようになります。
[8]各行の値を作成する
[For each]-[End]の内側に、[Set Variable(変数の設定)]アクションを配置します。
[設定](変数名)でNewVarをクリックして編集モードにして%Row%と入力します。変数名がRowになります。
[宛先](値)は現在行として、ファイル型のCurrentItem変数の各プロパティを参照するために、以下のようにしておきます。
%{[CurrentItem.Name, CurrentItem.FullName, CurrentItem.Directory, CurrentItem.Extension, CurrentItem.Size, CurrentItem.Directory.CreationTime, CurrentItem.LastModified] }%
個々のプロパティの値を参照したい場合、{x}をクリックしてCurrentItem変数のツリーを展開し、プロパティをダブルクリックすることで、プロパティ参照を入力することもできます。ただし、参照したいプロパティが多い場合は、入力するかコピー&ペーストのほうが効率的に設定できます。
入力できたら、設定を保存します。
[9]FileTable変数にRow変数を追加する
[For each]-[End]の内側――前の手順の[Set Variable(変数の設定)]アクションのすぐあとに、再び別の[Set Variable(変数の設定)]アクションを配置します。
[設定](変数名)の右側のNewVarをクリックして、編集モードにして、%FileTable%とします。これで、FileTableに値を上書きするアクションになります。
[宛先](値)として「%FileTable + Row%」とすることで、現在のFileTable変数(データテーブル型)の値に、Row変数の値(現在行、データテーブル型)を追加して新たなFileTable変数の値を設定できます。ループの中で使用することで、現在行が追加されていき、変数の中で各ファイルのプロパティの値リストの表が作成されます。
[10]データテーブル変数の値をCSVファイルに保存する
[For each]-[End]のあとに、[ファイル]アクショングループの[CSVファイルに書き込みます]アクションを配置します。
アクションのパラメーター選択画面が開くので、以下のように値を設定&保存しておきましょう。
- 書き込む変数:%FileTable%
- ファイルパス:%SelectedFolder%\FileTable.csv
- エンコード:UTF-8
「\」は円記号キーで入力しますが、バックスラッシュで表示されることもあります。
[11]フォルダーを開くアクションを配置する
[システム]アクショングループの[アプリケーションの実行]アクションを配置します。以下のように設定して、保存します。
- アプリケーションパス:explorer
- コマンドライン引数:%SelectedFolder%
以上でフローの作成は終了なので、ツールバーの保存ボタンでフローを保存します。
[12]フローを実行する
ツールバーの実行ボタンをクリックして、フローを実行します。フォルダー選択ダイアログが表示されるので「フォルダー/ファイルの作成」で作成したデスクトップのフォルダーを選択します。
フローの実行が終わると、選択したフォルダーが表示され、FileTable.csvが作成されているはずなので、テキストエディターで開きます。
選択したフォルダーにあるファイルのプロパティ値の一覧が、CSV形式で格納されているのが確認できます。
[ファイル]アクショングループには、[CSVを読み取ります]アクションもあり、CSV形式でデータの格納されたテキストファイルがある場合、読み取ったデータをデータテーブル型の変数に代入してフローで使用できます。
まとめ
デスクトップ上のファイル操作・フォルダー操作、ファイル情報取得、データテーブル型について説明しました。次回はフローでのExcelブック操作について説明します。
