UiPathのファイルパス欄にはワイルドカードは使えないの?
“C:¥user¥desktop¥欲しいファイル*.xlsx”みたいに指定したいんだけど。
そのままでは使えないから、ひと手間加えないといけないんだ。
Directory.GetFiles メソッドを使うぞ。
使用例
あるシステムからダウンロードした以下のようなファイルがあります。
「顧客データ202208051133229.xlsx」
このファイルをコピーしたり、開いたりしたいのですが、
ファイル名の数字はシステムからダウンロードするたびに変わってしまうようです。
そこで「顧客データ*.xlsx」としてファイルを指定したいのですが、ワイルドカードを使ってもエラーになってしまいます。(完全一致でないといけないため)
以下にワイルドカードを使ってファイルを特定する方法を紹介します。
全体フロー
ふむふむ。全然わかんない。
じゃあ最初におおまかに説明するぞ。
1、目的のファイルが入っているフォルダ内のファイルを配列として取得する
2、「繰り返し」を使って、目的のファイルを変数に代入する
って感じだ。
見た目よりも簡単だから1歩ずつやっていこう。
変数の準備
まずは使用する変数を作ります。変数名はなんでもOKです。
変数名に統一性がないのは勘弁してくれ。きっと適当に作ったんだな。
1、fileList :フォルダ内のファイルを格納するための、Array型のString変数
2、targetfile:ワイルドカードを使用して取得した目的のファイル名を格納するString型の変数
フォルダパスとファイル名を指定する
代入アクティビティを挿入します。(全体フロー参照)
左側の変数は先ほど作成したfileListを指定します。
右側には以下のように入力します。
()の左側が取得したいファイルが入っているフォルダのパスを入力します。
右側には対象のファイル名をワイルドカードを使って入力します。
System.Io.Directory.GetFiles("対象のファイルが入っているフォルダのパス", "対象のファイルをワイルドカード*で指定")
これで、ワイルドカードを利用したファイル名が変数fileListに格納されます。
目的のファイルを変数に格納する
繰り返しアクティビティの「次のコレクション内の各要素」にfileListと入力します。
本体内に代入アクティビティを挿入し、左側に targetfileと入力し、右側には以下のように入力します。
結果を確認するためにメッセージボックスで格納されたファイル名を表示させています。
注意点
この方法でワイルドカードを使ったファイル名の取得ができますが、以下のように同じようなファイル名が複数あった場合は最初にヒットしたファイルが選ばれてしまいます。
「顧客データ202208048837213.xlsx」
「顧客データ202208051133229.xlsx」
「顧客データ202208063343294.xlsx」
これだとどれも「顧客データ*.xlsx」になっちゃうね・・・
こういった場合は絞り込みを工夫したり、格納フォルダを分けるなどの対応が必要です。
例えば、このファイル名はよくみると「顧客データyyyymmdd・・・.xlsx」となっているようです。それならyyyymmddのところは変数を利用し以下のようにするという方法もあります。
「”顧客データ” & yyyymmdd & “*.xlsx”」
同じようなファイル名がたくさんある場合は指定の仕方に注意が必要なんだね。