Edited at

UiPathでよく使う.NETコード集 ※随時更新

UiPathでオートメーションを開発できるようになるには、

1. Community Editionをインストールして

2. UiPath Academy(※1章あたり目安1時間、全15章)でWebトレーニングを受講して

各種アクティビティの使い方を理解すれば十分でしょう。全て無料です。

が、実際に開発する中では.NETのクラスメソッドを利用してコーディングしたほうが

便利なケースが多々あるので、自分の備忘録も兼ねてよく使うコードを少しずつ書き出してみます。


日付関係

やりたい事
コード例
備考

今日の日付を文字列で取得
DateTime.Now.Date.toString("yyyy/MM/dd")
→ 2018/05/01
.NETの日時書式の文法

日付の加算(減算)
10日前:DateTime変数.AddDays(-10)
月:AddMonths(n)
年:AddYears(n)


DataTable関係


DataTableの行(DataRow)を別のDataTableに追加する→DataTable.ImportRow()

Add data rowアクティビティで追加しようとすると

実行時に[This row already belongs to another table]エラーになる。(ありがち)

Add data rowで追加できるのは、DataTableに属さない野良DataRowだけなのです。

datarow.png

この場合、DataTable変数.ImportRow()をInvoke methodアクティビティで実行する

(Parameterで追加するDataRow変数を指定)のが正解。

invoke.png param.png

※dtToが追加する先のDataTable、rowが追加したいDataRow


DataTableのソート→DataTable.Select()

DataTableのSort用Activityは(2018/05時点で)無いので、

DataTable変数.Select(Nothing, ソート条件式)をAssignで使う。

sort.png

ソート/フィルタ式の書式解説

返り値はDataTableじゃなくて、ソート済のDataRow[]なので、

後はFor eachアクティビティ(For each rowではない)で1件ずつ処理する。

※For eachはどの型の配列なのかを指定(TypeArgument)する必要があるので注意。

sortedrow.png


DataTableをフィルタ→DataTable.Select()

ソート同様、DataTableを条件でフィルタするにはDataTable変数.Select(フィルタ条件式)を

Assignで 実行し、フィルタ済のDataRow[]を取得する。

ソート/フィルタ式の書式解説

フィルタ式の例>

- Col1 Like 'RPA%' Or Col2 = 'Automation'

- Col1 > 200 And Col2 In ('AA', 'BB', 'CC') And Col3 is NULL

2018/07/01. クレスコのエンジニアの方がフィルタ速度について有効な情報を載せて下さってます。

DataTable 操作のパフォーマンスが上がった話


その他

やりたい事
コード例
備考

DataTableの1行目1カラム目の値を取る
DataTable変数.Rows(0).Item(0).ToString()
Item("名前")のようにカラム名でも指定可

For each row内で今の行番号を取る(2018.2以前)
DataTable変数.Rows.IndexOf(row)
素直にカウンタ変数使った方が可読性高いかも

For each row内で今の行番号を取る(2018.3以降)
Indexパラメータ(↓の絵参照)
2018/11/16追加

DataTableの構造をコピーして新規のDataTableを作成
AssignでdtCopy = dtOriginal.Clone()
値までコピーする場合はCopy()

For eachの新パラメータ"Index"を使った行カウントのとり方

image.png


ファイル・フォルダ関係

やりたい事
コード例
備考

指定したフォルダ中のサブフォルダ一覧を取得
Directory.GetDirectories(folderPath)
各サブフォルダパスの配列(String[])が返る

指定したフォルダ中のファイル一覧を取得
Directory.GetFiles(folderPath)
各ファイルのファイルパスの配列(String[])が返る

ファイル絶対パスからファイル名のみ取り出す
Path.GetFileName(filepath)
filepathはWebのURLでも可


文字列関係

MSDNのStringメソッドから、やりたい事に合うメソッドを探す。

ここではよく使うものを抜粋。

やりたい事
コード例
備考

半角スペース区切りで文字列を分割
str1.Split(" "}, StringSplitOptions.None)
区切り文字は {"は", "を", "が"} のように複数指定可

分割した文字列の3番目を取得
str1.Split(" "}, StringSplitOptions.None)(2)
インデックスは0から始まるので、3番目の指定は2

指定した文字列で始まるかどうか
str1.StartsWith("最初は")
返り値はboolなのでIFアクティビティでよく使う

Format文字列の指定
String.Format("いちいち{0}を{1}しなくていいよ。", str1, str2)
str1 = "食ったものの写真"
str2 = "twitterにアップ"

文字列の置換
str1.Replace("置換前", "置換後")

Type intoの文中に改行を入れる
Environment.NewLine
"\r\n"ではない


型変換(キャスト)関係

やりたい事
コード例
備考

Intへの変換
Cint(変数)
変数.ToInt()はありそうで無い


条件判断(IF-Condition)関係

condition.png

判断したい事
コード例
備考

○と×が同じ
input = 10
== じゃない

○と×が違う
input <> 10
!= じゃない

アレアレ、かつコレコレ
input1 <= 10 AndAlso input2 <= 10
&, &&じゃない
あとAndよりAndAlsoの方がベター

アレアレ、もしくはコレコレ
input1 <= 10 OrElse input2 <= 10

Or.pngじゃない
あとOrよりOrElseの方がベター

文字列に特定のキーワードが含まれている
strInput like "*エラー*"
Like演算子


※ And/Else と AndAlso/OrElseの違い

ypmyさんからのアドバイスで知ったのですが、

UiPath的に[かつ/もしくは]を表現するのは[And/Else]よりも[AndAlso/OrElse]の方が望ましいです。

(C#でいう && や || に厳密に相当するのがAndAlso/OrElse。)

理由はちゃんとあって、例えば

 ①アレアレ And コレコレ

 ②アレアレ AndAlso コレコレ

とあった時、UiPathは

 ①の場合はアレアレもコレコレも両方確かめようとします。

 ②の場合はまずアレアレだけ確認して、NGだったらすぐElseに行き、コレコレは確認しません。

なので②は動作が速いです。

あと地味にInput Dialogで役立ちます。

例えば入力された文字列("UIPATH"と入力される事を期待)をチェックするケースで

input.png

Condition欄に strInput.ToString() = "UIPATH" と書くだけだと、

何も入力せずOKボタン押した場合に NullReferenceExceptionエラーが出ます。

null.png

Input Dialogに何も入力が無かった場合、

その結果を受けるstrInput(GenericValue変数)は実体を持たないNull(nothing)になりますが、

実体の無いNullにToString()を実行させようとするのでエラーになるのです。

そんな時は↓のようにIsNot nothing(アレアレ)をAndAlsoで付けてやれば、

strInput IsNot nothing AndAlso strInput.ToString() = "UIPATH"

アレアレの時点でNGだとわかると、そこでUiPathは諦めてくれるのでエラーを回避できます。

これがAndだと、アレアレもコレコレも両方確認してしまうので、結局エラーになってしまいます。

AndAlsoって便利~。

ちなみにこうした振る舞いをする演算子は"ショートサーキット"と呼ぶそうです。これ豆な。


2018/05/07 今更ですが、内容がakira-fさんの

UiPathでの自動化ロボット作成時によく使った、 VB.Net まとめ

と結構ダブってる事に気付きました。

2018/07/01 条件判断の項を追記しました。

2018/08/05 ypmyさんのアドバイスを受け、条件判断の項(And/Or)を修正しました。