フォルダ内の指定した拡張子のファイルのみ取得する
フォルダ内の指定した拡張子のファイルのみ取得するには、公式アクティビティが用意されていないため、.NET関数を使用します。
.NET関数を使用する方法
System.IO.Directory.GetFiles関数を使用します。
※「System.IO.」は省略可能です。
GetFiles関数で取得した配列に対し、指定した検索条件に合致する要素だけ抽出する関数を組み合わせることで実現します。
GetFiles関数の基本的な使い方は「フォルダ内のファイルをすべて取得する」をご覧ください。
※「System.IO.」は省略可能です。
GetFiles関数で取得した配列に対し、指定した検索条件に合致する要素だけ抽出する関数を組み合わせることで実現します。
GetFiles関数の基本的な使い方は「フォルダ内のファイルをすべて取得する」をご覧ください。
GetFiles関数でも条件を指定することができますが、こちらの記事にあるように条件によってはうまく抽出できない場合があります。
異なるアプローチとして、GetFiles関数でフォルダ内の全てのファイルを配列として取得し、その配列に対して特定条件のファイルのみ抽出する方法を紹介します。
GetFiles関数でファイル一覧を配列として取得し、その配列に対して特定条件のファイルのみ抽出する方法
コレクションに対する検索や抽出などが行えるLINQを使います。
GetFiles関数に続けて、Where句を記載します。具体的には以下のように記述します。
Directory.GetFiles("フォルダのフルパス").Where(Function(file) file.Contains("検索したい文字")).ToList
Where句の後ろの Function は決まり文句です。
file は配列から取り出した1要素にあたるものを記載するとわかりやすいと思います。 今回は、フォルダに含まれるファイル一覧の配列から取り出す一要素なので file を指定しています。fileをitemに変えて以下のように記述しても正常に動作します。
Directory.GetFiles("フォルダのフルパス").Where(Function(item) item.Contains("検索したい文字")).ToList
繰り返しアクティビティにおける「要素」と同じ考え方ですね。
続いて条件を記載します。file変数に指定した文字が含まれていること を抽出条件にするため、以下の関数を記述しています。
file.Contains("検索したい文字")
もし ファイルの最後が指定した文字で終わっていることとしたい場合は以下になります。
Directory.GetFiles("フォルダのフルパス").Where(Function(file) file.EndsWith("指定した文字")).ToList
最後にList型に型を変換しています。これも決まり文句的に使っていただいて問題ないと思います。
UiPathにおける使用方法
フォルダ内の指定した拡張子のファイルのみ取得する
基本は先ほどの説明の通りで、条件式のみ変更します。
拡張子によって条件判断させるので、ファイルパスから拡張子を取得する関数であるPath.GetExtension関数を使用し、以下のように記述します。
Directory.GetFiles("フォルダのフルパス").Where(Function(file) Path.GetExtension(file)="xlsx").ToList
Path,GetExtension関数を使用するとファイルの拡張子のみを取得できます。
Path.GetExtension(file)="xlsx"