StudioXのアクティビティ

UiPath StudioXのファイル/フォルダーアクティビティ【ファイル - 参照】

2021/12/17

ファイルを操作する前に、ファイルの状態を知ることは必須だったりしますよね。

特に、ファイルがあるのかないのかで、処理が分岐するなんてことはよくあります。

そこで、ファイルを操作する前後にくるような、ファイルの参照に関するアクティビティについてまとめました。

この記事では、以下のアクティビティについて解説します。

記事編集時のStudioX - ver2021.10

ファイル - 参照のアクティビティ

  • ファイルの存在を確認
  • ファイルを選択
  • ファイル情報を取得
  • 繰り返し(フォルダー内の各ファイル)

ファイルの存在を確認

指定したファイルが存在するかどうか確認します。(ガイドはこちら)

指定したファイルが存在すれば、結果にTrueを返し、ファイルがなければ結果にFalseを返します。

ここでは、以下の項目について解説します。

  • ファイルパス
  • 出力結果

ファイルパス

有無を確認したいファイルのパスを指定します。

上図では、既にあるファイル名を指定していますが、もちろん、存在しないファイルを指定しても構いません。

出力結果

ファイルの有無の結果について、どこに記憶するか指定します。

ファイルが存在すればTrue、存在しなければFalseとなります。

[出力結果]の活用

ところで、[出力結果]で指定した名前は、どう活用するのでしょうか。

一例ですが、[If]と一緒に使うことが多いですね。

ファイルがある場合は"Then"へ、ない場合は"Else"へ分岐して、自動化処理を分岐します。

ファイルのあいまい検索はできない

[ファイルの存在を確認]では、残念ながら固定のファイル名しか指定することが出来ません。

でも、名前の一部が一致するファイルを確認したい場合など、よくあるんじゃないでしょうか。

これについては、[後のために保存]を追加し、VB.NETの構文を使うことで可能になります。

【例題】
"C:\users\ogushi\Desktop"フォルダー内に、"サン”から始まるテキストファイルがあるかを確認し、結果を"ファイルの有無"という名前で記憶する。

例題を実現するための手順は、以下のとおりです。

まずは、[後のために保存]を[デザイナー]パネルに追加します。

[保存先]の[+]-[詳細エディターを開く]をクリックし、以下のテキストを入力します。

Saved.Values(Of Boolean)("ファイルの有無")

[保存する値]の[+]-[詳細エディターを開く]をクリックし、以下のテキストを入力します。

Directory.GetFiles("C:\Users\<ユーザー名>\Desktop", "サン*.txt").Count > 0
(<ユーザー名>は、PCのログインユーザー名です。)

3の式は、「サンから始まるテキストファイルをカウントし、件数が0件より大きいかどうかを判定する」という構文です。

参考までに。

「サンを含むテキストファイル」は、"*サン*.txt"、「サンで終わるテキストファイル」は、"*サン.txt"、「サンで始まるファイル(テキストに限らない)」は、"サン*"と入力します。

知っておくと、きっと役に立つはずですよ。
おぐし

ファイルを選択

ファイルを選択するためのダイアログボックスを開きます。(ガイドはこちら)

自動処理中に、操作対象とするファイルを都度指定できるダイアログボックスを表示します。

処理するファイル名が予め決まっていなかったり、自動でファイルの指定が難しい場合に使うことになるでしょう。

ここでは、以下の項目について解説します。

  • ファイルの種類
  • 選択したファイルパス

ファイルの種類

ダイアログボックスを開いたときに、対象のファイルだけが指定できるようフィルターします。

一覧を見ると、8種類のファイル形式と、自分でカスタムできる"ユーザー定義"から選択できるようになっていますね。

CSVやExcel、PDFなどを指定できます。

ただ、ver2021.10.4時点では、残念ながらExcelやPowerPointなど、複数のファイル形式から選択できるものには不具合があります。

ダイアログボックスにファイルが表示されません。

そこで、[プロパティ]画面の[フィルター]に表示されているテキストを、以下のように修正してください。

Excelを例に、修正する手順です。

[ファイルの種類]から"Excel"を選択します。 [プロパティ]パネルのフィルターで、”、(読点)"を";(セミコロン)"に置換します。

ユーザー定義の編集

[ファイルの種類]で"ユーザー定義"を指定すると、自分でフィルターの作成が出来ます。

フィルターの構文は、以下のとおりです。

<ファイルの種類>|*.<拡張子>

例えば、写真で使われているファイル形式”jpg"でフィルターしたい場合、以下のように入力します。

写真の画像|*.jpg

複数のファイル形式を指定する場合は、";(セミコロン)"で拡張子を繋げます。

例えば、画像ファイル"png"、"jpg"、"bmp"でフィルターする場合は以下の式になります。

画像ファイル|*.png;*.jpg;*.bmp

選択したファイルパス

選択したファイルのパスについて、どこに記憶するか指定します。

ファイル情報を取得

指定したファイルのプロパティを取得し、プロジェクト内で後で使用するために情報を保存します。(ガイドはこちら)

ファイルのプロパティを取得します。

以下7項目が取得されます。

  • 名前(ファイル名)
  • 完全名(パスを含むファイル名)
  • フォルダー(ファイルが格納されているフォルダー)
  • 最終更新日
  • 差異数アクセス日
  • 作成日
  • 拡張子

フォルダーや名前に切り分けた値を取得できるので、色んな場面で使えそうですね。

ここでは、以下の項目について解説します。

  • ファイルパス
  • 出力先

ファイルパス

情報を取得したいファイルを指定します。

例えば、自動化処理実行中にファイルを都度指定したい場合は、[ファイルを選択]と組み合わせると出来ます。

出力先

選択したファイルのプロパティ(情報)について、名前を付けて記憶します。

 

繰り返し(フォルダー内の各ファイル)

指定したフォルダー内のすべてのファイルを反復処理します。特定の種類のファイルのみ処理したい場合はフィルターを使用できます(例:*.txt)。中に追加するアクティビティは各ファイルに対して動作を実行し、現在のファイルのプロパティに対するアクセス権を持ちます。(ガイドはこちら)

指定したフォルダー内にある各ファイルを、1ファイルずつ読み取りながら、処理を繰り返します。

1ファイルの処理は、[ここにアクティビティをドロップ]内に、組み上げていきましょう。

ここでは、以下の項目について解説します。

  • 繰り返し
  • フォルダー
  • サブフォルダーを含む
  • フィルター条件
  • 並べ替え順

繰り返し

現在の周回のファイル情報を記憶する名前を指定します。

既定では"CurrentFile"ですが、必要に応じて意味を表す名前に変更するとよいでしょう。

フォルダー

参照するファイルが格納されているフォルダーを指定します。

サブフォルダーを含む

指定したフォルダー内に、更にフォルダーが存在する場合、チェックOnにするとその中のフォルダーまで検索してファイルを参照します。

例えば、以下のようなフォルダー構成を用意し、チェックOnにしてパスを出力してみました。

出力パネルに表示される結果は、以下のようになります。

"サンプル"内にある"サブ1"や"サブ2"、更にその下の階層のフォルダーのファイルまで参照していることが分かりますね。

ちなみにチェックOFFの場合は以下の結果になります。

フィルター条件

取得するファイルの種類を指定して、対象を絞り込みます。

指定する文字列は「*.拡張子」です。

例えば、テキストファイルであれば"*.txt"、Excelであれば"*.xlsx"になります。

また、ファイルの種類は1種類のみ指定可能です。

"*"はワイルドカードなので、「*1.txt」のような記入も可能ではあるんですが、期待どおりの結果にならない場合があるようです。

こちらのフォルダー構成を例にしましょう。

例えば、フィルターを"*1.txt"と指定すると、サンプル01.txt、サンプル11.txtが取得されるはずですよね。

実際に組んで、結果を出力してみました。

サンプル01.txtとサンプル11.txt以外のファイルが参照されてしまいました。

そこで、複雑なフィルターを指定したい場合は、[If]を使うといいででしょう。

[If]を使えば、拡張子(ファイルの種類)を複数指定することも出来ますね。
おぐし

並べ替え順

対象となるファイルについて、読み込む順番を指定して反復処理を実行します。

8項目の並べ替えの中から指定できます。

まとめ

ここで紹介したアクティビティは、処理するファイルを特定する場合に有効ですね。

まとめます。

まとめ

  • [ファイルの存在を確認]は、ファイルが明確な場合に有効。
  • 繰り返し(フォルダー内の各ファイル)で複雑なフィルターを掛ける場合は[If]を使う。

この記事で、何か1つでも新しい発見が得られたのなら、僕もうれしいです。

-StudioXのアクティビティ

© 2023 おぐしログのRPA入門