Last updated on 2022年8月9日
RPAで自動化を行う際、フォルダにあるファイルをまとめて処理できればと思ったことはありませんか。
毎回一つ一つファイルを選択して、自動化していたら効率も上がりませんよね。
UiPath でそんなフォルダ内のファイルを一括で処理することができます。
今回はこのフォルダ内の一括処理について紹介したいと思います。
少しVBの知識が必要になりますのでご了承ください。
本記事では、UiPath Ver 2021.10.4 を使用しています。
Contents
利用するアクティビティ
フォルダ内のファイルを取得する際は、専用のアクティビティがあるわけではなく既存のアクティビティ+ メソッドを組み合わせることで実現できます。
既存のアクティビティですが[繰り返し(コレクションの各要素)]アクティビティを使用します。
このアクティビティは、”繰り返し”となっているように渡されたコレクション(集まり)を一つずつ取り出し繰り返し処理を実行することができます。
つまり、フォルダ内のファイル処理を行う場合はそのフォルダ内の “ファイルのコレクション” を渡してあげることで、それらが一つずつ取り出され繰り返し実行させることができます。
ファイルのコレクションの取得にはメソッドを使用します。
構文は次のような文字列になります。
// 例. Directory.GetFiles("C:/Users/epic/Desktop/testfolder")
Directory.GetFiles("フォルダーパス")
上記をコレクションに設定すればフォルダ内のファイルをまとめて取得する事ができます。
また、書き方によっては「特定の拡張子のファイルのみ取得する」「サブフォルダ内のファイルも取得する」等設定をすることができます。
詳しく知りたい方は、Microsoftの公式サイトを参考にしてみてください。
自動化の手順
コードのみではイメージが沸きませんよね。
具体的な利用方法について次に説明したいと思います。
手順は次の通りです。
- 対象のフォルダパスを【繰り返し(コレクションの各要素)】に設定する
- 【繰り返し(コレクションの各要素)】の “TypeArgument” をString型に設定する
- 【繰り返し(コレクションの各要素)】内で、要素を利用しファイルを扱う
(1)対象のフォルダパスを【繰り返し(コレクションの各要素)】に設定する
前述で解説したとおり[繰り返し(コレクションの各要素)]アクティビティのコレクションに絵ソッドを利用し対象とするフォルダパスを設定します。
(2)【繰り返し(コレクションの各要素)】の “TypeArgument” をString型に設定する
このときプロパティパネルの “TypeArgument” をString型にしておきます。
設定する理由ですが、フォルダ内のファイルを実際のデータとして扱うのではなく、あくまでそのファイルまでのパスを取得し共有してあげるという使い方をするため文字列のほうが都合が良いからです。
(3)【繰り返し(コレクションの各要素)】内で、要素を利用しファイルを扱う
取得したファイルのですが、繰り返しで行われる1ファイル1ファイルが順番に【要素】(初期値はitem) 格納されます。
自動化実装のサンプル
次の例は、フォルダ内のファイルを取得し、そのファイルパスをメッセージボックスを利用し表示する最もシンプルな例になります。
真ん中の【繰り返し(コレクションの各要素)】アクティビティの“コレクション”と書かれた右側の枠にVB.NETの文字列を設定します。
実行をしてみます。
実行をすると、取得したファイルの絶対パスが表示されるはずです。
(これは、item(※変更可能)という変数の中に取得したファイルのパスが順番に格納され、それを【メッセージボックス】に渡しているためです)
このように、ファイルパスが取得できたということはあとはこの取得できたファイルパスを別のアクティビティに渡して上げましょう。
例えば、【エクセルアプリケーションスコープ】や【ファイルを移動】、【フィルをコピー】など様々な利用用途が考えられますね。
参考程度に下記は取得したファイルパスを【ファイルを移動】アクティビティに渡して上げている例になります。
これにより特定フォルダ内のファイルをすべて別のフォルダ内に移動することができます。
おまけ:特定のファイル拡張子のみ取得する方法
指定したフォルダの中にある特定の拡張子のみのファイルを取得したい場合は、次のようにかくことで実現することができます。
Directory.GetFiles("フォルダーパス", "ファイルの条件")
“ファイルの条件”の部分には取得したいファイルの名前の条件を書きます。
例えば、csvファイルすべてを取得したい場合は次のように書きます。
// "ファルダーパス"内のCSVファイルをすべて取得する場合
Directory.GetFiles("フォルダーパス", "*.csv")
*(ワイルドカード)と. csv を組み合わせてすべてのファイルを表現しています。
もちろん、.pdf や .xlsx などどんな拡張子でも可能なので試してみてください。
【追記】2021/12/30
UiPath Ver 2021.10.4 では新しく専用のアクティビティが用意されていたので紹介したいと思います。
専用のアクティビティができてめちゃ便利になったにゃ
新しく[繰り返し(フォルダー内の各ファイル)]というアクティビティが追加されていました。
このアクティビティは広げることができ全体は次のようになっています。
すごい便利になりましたね、いままでのようにメソッドを書く必要はなさそうです。
ちなみに実行順序も選択することができます。
サクッと使ってみましたがいままでのようにメソッドを書く必要もなく、かつUIが見やすく非常に使い勝手がいいので気になった方は試してみてください。
最後に
以上、ファルダ内のファイルを取得する方法についての記事でした。
フォルダ読み取りができると「THE自動化!」って感じがしませんかね。
一部呪文のようなものがありましたが使いまわしなので、丸暗記で大丈夫です。是非、業務でもフォルダからの読み取り試してみてください!!
今回も最後までお読みいただきありがとうございました。
では。