Skip to content

UiPath フォルダ内のファイルをまとめて処理

Posted in Notes

Last updated on 2021年9月26日

RPAで自動化を行う際、特定のフォルダ内にあるファイルをまとめて処理したいケースは非常に多いのではないかと思います。
どう思う?

う〜ん、スキャナーでスキャンしたファイルがフォルダに格納されるからそれ読み取って...とか、社内手続きのエクセル申請書が特定のフォルダにあるからそこからすべて読み取ってシステム登録とか.....意外と多いにゃ。

そうだよね。仕事でファイルを使わないことって無いもんね。
この記事ではそんなフォルダ内のファイル処理の方法について説明しますので参考にしてみてください。


利用するアクティビティ

フォルダ内のファイルを取得する際は、専用のアクティビティがあるわけではなく既存のアクティビティ+VB.NETという文を組み合わせる必要があります。

後者について、あまりプログラミングに精通していない方にとっては難しく考えてしまう方もいるかもしれませんが、ほとんど記述形式は決まっているので英語の構文だと思って暗記してしまえば問題有りません。(また最近ではサジェスチョンが表示されるようになり覚えなくてもなんとなくでいけるようになってました)

まず、既存のアクティビティですが【繰り返し(コレクションの各要素)】を使用します。

このアクティビティは、"繰り返し"となっているように、渡されたコレクション(集まり)を一つずつ取り出し繰り返し処理を実行することができます。

つまり、フォルダ内のファイル処理を行う場合は、そのフォルダ内の "ファイルのコレクション" を渡してあげることで、それらが一つずつ取り出され繰り返し実行されるというわけです。

加えて、VB.NETの文を書く必要があるのですがそれは次のような文字列になります。

// 例. Directory.GetFiles("C:/Users/epic/Desktop/testfolder")
Directory.GetFiles("フォルダーパス")

上記をコレクションに設定すればフォルダ内のファイルをまとめて取得する事ができます。

また、書き方によっては「特定の拡張子のファイルのみ取得する」「サブフォルダ内のファイルも取得する」等設定をすることができます。

詳しく知りたい方は、Microsoftの公式サイトを参考にしてみてください。


利用方法

では具体的にどのように利用すればよいのか?

コードのみでは、イメージが沸かないかと思いますので具体的な利用方法を説明したいと思います。

手順は次の通りです。

  • 対象のフォルダパスを【繰り返し(コレクションの各要素)】に設定する
  • 【繰り返し(コレクションの各要素)】の "TypeArgument" をString型に設定する
  • 【繰り返し(コレクションの各要素)】内で、要素を利用しファイルを扱う

前述で解説したとおり【繰り返し(コレクションの各要素)】のコレクションにVB.NETを利用し対象とするフォルダパスを設定します。

あわせて、プロパティパネルの "TypeArgument" をString型にしておきます。

この設定をする理由としては、フォルダ内のファイルを実際のデータとして扱うのではなく、あくまでそのファイルまでのパスを取得し共有してあげるという使い方をするため文字列のほうが都合が良いためです。

そして、取得したファイルのですが、繰り返しで行われる1ファイル1ファイルが順番に【要素】(初期値はitem) 格納されます。


次の例は、フォルダ内のファイルを取得し、そのファイルパスをメッセージボックスを利用し表示する最もシンプルな例になります。

真ん中の【繰り返し(コレクションの各要素)】アクティビティの"コレクション"と書かれた右側の枠にVB.NETの文字列を設定します。

実行をしてみます。

実行をすると、取得したファイルの絶対パスが表示されるはずです。

(これは、item(※変更可能)という変数の中に取得したファイルのパスが順番に格納され、それを【メッセージボックス】に渡しているためです)

このように、ファイルパスが取得できたということはあとはこの取得できたファイルパスを別のアクティビティに渡して上げましょう。

例えば、【エクセルアプリケーションスコープ】や【ファイルを移動】、【フィルをコピー】など様々な利用用途が考えられますね。

参考程度に下記は取得したファイルパスを【ファイルを移動】アクティビティに渡して上げている例になります。

これにより特定フォルダ内のファイルをすべて別のフォルダ内に移動することができます。


【追記】特定のファイル拡張子のみ取得する方法

指定したフォルダの中にある特定の拡張子のみのファイルを取得したい場合は、次のようにかくことで実現することができます。

Directory.GetFiles("フォルダーパス", "ファイルの条件")

"ファイルの条件"の部分には取得したいファイルの名前の条件を書きます。

例えば、csvファイルすべてを取得したい場合は次のように書きます。

// "ファルダーパス"内のCSVファイルをすべて取得する場合
Directory.GetFiles("フォルダーパス", "*.csv")

*(ワイルドカード)と. csv を組み合わせてすべてのファイルを表現しています。

もちろん、.pdf や .xlsx などどんな拡張子でも可能なので試してみてください。


最後に


以上、ファルダ内のファイルを取得する方法についての記事でした。
フォルダ読み取りができると「THE自動化!」って感じがしませんかね。
一部呪文のようなものがありましたが使いまわしなので、丸暗記で大丈夫です。是非、業務でもフォルダからの読み取り試してみてください!

今回も最後までお読みいただきありがとうございました。

では。

Be First to Comment

コメントを残す