2018.08.07
今回はUiPath開発中によく使用するアクティビティや関数を紹介しようと思います。
ファイルやフォルダを操作するアクティビティは、アクティビティツリーの「System―File」の中にあります。
これらのアクティビティを扱うためには、ロボットが現在どのフォルダ上で作業をしているか、
また、対象となるファイルが、どのフォルダ内に存在するか、意識する必要があります。
ロボットが現在どのフォルダ内で作業をしているかを調べるには、Directory.GetCurrentDirectory関数を使用します。
この関数は、現在ロボットが作業場所としているフォルダのパスを、String型で返してくれます。
下図は、「C:\tmp」フォルダ内のXAMLでロボットを動かしている例です。
Dirctory.GetCurrentDirectory関数で得られたカレントディレクトリパスが、
Write Lineアクティビティにより、Outputパネルに出力されました。
Directory.SetCurrentDirectory関数に、引数でフォルダパスを与えてあげると、ロボットの作業場所をそのフォルダに変更することができます。
この関数は、別のフォルダに移動するだけで、値を返すことはしないので、
先ほどのGetCurrentDirectory関数と同様にAssignアクティビティで使用しようとすると、エラーになってしまいます。
このような場合は、Assignアクティビティの代わりに、Invoke Codeアクティビティを使用するとよいです。
1つめのWrite Lineアクティビティでは、「C:\tmp」というカレントディレクトリパスが表示されています。
Invoke Codeアクティビティ内で実行されたDirectory.SetCurrentDirectory(“Folder A”)関数により、
カレントディレクトリが「C:\tmp\Folder A」に変更されたことが、2つめのWrite Lineアクティビティにより確認できます。
ファイルの一覧を取得するときは、Directory.GetFiles関数を使用します。
対象となるフォルダを引数で与えれば、そのフォルダの中にあるフォルダは除いて、ファイルのみを取得してくれます。
ファイルは1つとは限りませんから、ストリング配列型で結果を受け取ることになります。
下図のようにファイルとフォルダが複数存在するフォルダで実行してみましょう。
Directory.GetFiles(“C:\tmp”)関数で得られた複数の結果を、For Eachアクティビティにより、
ひとつずつ取り出して、Write LineアクティビティでOutputパネルに出力しています。
「C:\tmp」の中のファイルのみが表示されていることがわかります。
引数を追加することにより、取得するファイル名を指定することもできます。
このとき、ワイルドカードを使用できます。
Directory.GetFiles(“C:\tmp”,”*docx”)関数により、「C:\tmp」フォルダの中で、
ファイル名が「docx」で終わるものだけが表示されました。
第2引数は、あくまでファイル名の指定であって、検索ワードではありません。
そのため、「*」を外して、Directory.GetFiles(“C:\tmp”,”docx”)としてしまうと、上記のケースでは、何も表示されなくなります。
「docx」に一致するファイル名しか該当しなくなるからです。
Directory.GetDirectories関数は、Directory.GetFiles関数とは逆に、フォルダの一覧だけを取得してくれます。
対象フォルダの指定の仕方や、名前を指定する方法は、Directory.GetFiles関数と同じです。
Webやファイルから読み込んだ文字列を操作するときに役に立つ関数を紹介します。
文字列の前後に余分な空白があるときは、Trim関数で除去できます。
下図の例では、最初、「い」と「は」が、それぞれ半角スペースと全角スペースで挟まれていますが、
Trim関数により前後の余分なスペースが削除されることがわかります。
結果がわかりやすくなるように、Trim関数によりトリミングされた文字列の前後を、「@」で挟んでいます。
文字列の前後にあったスペースだけが削除され、文字列の中に含まれているスペースは残されていることがわかります。
文字列のうち、一部だけを使用したい場合は、Substring関数を使用します。
使用する部分が、X文字列目からY文字だとすると、Substring(X, Y)となります。
ただし、最初の文字は一番目ではなくゼロ番目と解釈されるので、注意が必要です。
「一二三四五六七」という7文字の文字列の、2番目(ゼロからカウントするため、指定する数字は1)から3文字だけが表示されました。
文字列の最後のZ文字だけを使用したい場合は、Substring関数とCount関数を組み合わせて使用します。
Countは、文字列の長さを計算してくれる関数です。
「一二三四五六七」は7文字なので、Count関数の結果は7になります。
Substring(4,3)が実行されたため、5、6、7文字目、つまり、最後の3文字が表示されました。
Excelやデータテーブルを扱う際に役立つ関数を紹介します。
通常は、Read Rangeアクティビティを使用する際、
対象ワークシートをワークシート名で指定することが多いと思いますが、ワークシート番号で指定することもできます。
上図のようなExcelファイルの、すべてのワークシートに対して、同じ作業を行う場合を考えます。
下図の例では、for eachアクティビティでワークシート名を順番に指定しながら、
読み込んだワークシートの内容を、output data tableアクティビティでString型に変換してから表示しています。
同じことをワークシート番号で行ってみましょう。
事前準備として、Excel Application Scopeアクティビティで、対象ワークブックの変数を取得しておきます。
Excel Application ScopeアクティビティのプロパティのOutput―Workbookの欄に、
ワークブック変数(WorkbookApplication型)を設定して、値を取得します。
取得したワークブック変数に対し、GetSheets関数を使用すると、総ワークシート数を取得したり、
N番目のワークシートを指定したりできるようになります。
Excel Application ScopeアクティビティのプロパティのOutput―Workbookの欄に、
ワークブック変数(WorkbookApplication型)を設定して、値を取得します。
Build data tableアクティビティで列名を指定しながら表を作成している最中に、
列の順番を入れ替えたくなったりすることがあります。
しかし、このアクティビティでは、列を追加することはできても、途中に挿入することはできません。
このようなときは、一度UiPath StudioでXAMLを保存して閉じてから、テキストエディタでXAMLを直接編集してしまうと楽です。
上図のデータテーブルの「失点」列と「得点」列をテキストエディタで入れ替えてみましょう。
XAMLをテキストエディタで開き、該当箇所を検索します。
ちょっとわかりづらいですが、オレンジ色の部分の「失点」と「得点」を入れ替えて保存します。
UiPath StudioでXAMLを開いてみます。
「得点」と「失点」が入れ替わりました。
今回のケースでは、入れ替える列のデータ型やオプションがまったく同じだったので、列名を入れ替えるだけで済みましたが、
データ型やAllow Null等のオプションが違う列を入れ替える際は、それらも入れ替えてあげる必要があります。
Build data tableアクティビティで最初から作り直すほうが早い場合もあります。
ケースバイケースで楽な方法で修正するとよいでしょう。
データテーブルをソートするときは、DefaultView.Sort関数と、DefaultView.ToTable関数を使用します。
上図のデータテーブルを、総得点の降順、総距離の昇順、の順でソートしてみましょう。
上図の2つの式により、ソートされたデータテーブルが作成されます。
データテーブルのX行、Y列目の値を取得する場合、データテーブル変数に対し、Rows関数とItem関数を使います。
XとYはゼロから始まることに注意して使用します。
いかがでしたでしょうか。
UiPathで使用できる各種関数、アクティビティの使い方をご紹介しました。
開発のお役に立てれば幸いです。