LoginSignup
19
34

More than 5 years have passed since last update.

UiPathで避けて通れないDataTableをおさらい

Posted at

UiPathで定型作業を自動化する際、どうやっても使う事になるのがDataTable。
.NETで業務アプリケーションを作るプログラマーにとっては定番なのですが、
RPAの世界ではそうじゃない人の方が大多数と思います。

UiPath Academyの「レッスン9 - Excelとデータテーブル」でも学べるのですが、
早い段階から知っておいた方が良い知識なので、UiPathで必要な範囲に絞っておさらいしてみます。

DataTable(データテーブル)とは何か

Excelシートと同じ、行と列の表形式データを入れる"入れ物"です。
Excelシートと違うのは、行番号は1でなく0から始まる事と、
列もA, B, C, ...ではなく列名(↓の例だと"ロボID"等)、もしくは行と同様に0, 1, 2, ...です。
DataTable.png

UiPathでは大抵の場合、↓のような使い方になります。
・Read RangeアクティビティでExcelシートを読み込む
・Data ScrapingでWebサイトから表形式データを取り込む
と、UiPathがデータをDataTableに詰めて返してくれるので、後はFor Each Rowアクティビティで
データを1行ずつ処理して、最後にWrite RangeでデータをExcelに書き込む、という流れ。
Usage.png

DataTableデータの持ち方

Excelシートを読み込む場合、UiPathから返されるDataTableのデータの持ち方は
Read Rangeアクティビティの"AddHeaders"のオン(デフォルト)/オフで変わってきます。
AddHeader.png
例えば↓のExcelシートでロボID "BP-302"が入っているのはA4セルですが、
Excel.png
読み込んだ結果のDataTableの中身とデータのアクセスの仕方は↓のように全然違います。
compare.png
 ※dtRobotはDataTableの変数名ね。
AddHeadersオンの場合(Data Scrapingで取ってくる場合もコレ)
 1行目がヘッダ列情報として使われ、データに入ってきません。
 DataTableは行番号が0から始まるのと合わせると、Excelの行番号と2つズレる事になります。
 データは列の名前でアクセスできます。わかりやすい。
AddHeadersオフの場合
 1行目からデータとして入ってきますが、列名が無いためデータは列番号でアクセスする事になります。

※行番号のズレも注意ですが、セル指定の順番もExcelと逆な事に注意が必要です。
 Excelは"A4"のように列→行の順、DataTableはdtRobot(2)("ロボID")のように行→列の順。

For Each RowとDataRow

DataRowについても知っておきましょう。
↓の通り、DataRowとはDataTableのそれぞれの行を指します。
1DataRow = 1行なので、行番号はありません。
DataRow.png
UiPathから返されたDataTableを上から1行ずつ処理する場合、For Each Rowアクティビティを使います。
Foreachの後に、勝手に"row"変数がセットされますが、これがDataTableから取り出したDataRowです。
row.Items(列名)で、指定した列名のデータを取り出す事ができます。
foreach.png
このワークフローを実行すると、Output窓に
デッカード
マクレーン
パワージョー
・・・
といったように、Excelから読み込んだ"ロボ名"列のデータがリストアップされます。


今回はここまで。
DataTableのもうちょっと踏み込んだ使い方、例えばソートとかフィルタとかは
UiPathでよく使う.NETコード集
で説明してますので、参考にして下さい。

19
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
34