RPA

UiPath Excel とデータテーブル

こんにちは、Takaです。
今回は、UiPath のデータテーブルに関する基本操作についてご紹介します。

データテーブルについて

UiPath 公式ページでは DataTable 変数について以下のように記載されています。

DataTable 変数は、大量の情報を格納できる変数の型の代表となるもので、行と列を持つデータベースまたは簡易スプレッドシートとして機能します。この変数の型は [参照して .Net の種類を選択 (Browse and Select a .Net Type)] ウィンドウで System.Data 名前空間 (System.Data.DataTable) の下で見つけることができます。

引用元:DataTable 変数 (UiPath)

データテーブルにデータを格納する手段としては

  1.  手動で入力(入力ダイアログ)
  2.  Excel からインポート
  3.  Web サイトからスクレイピングしたデータを格納

がありますが、ここでは 1.手動で入力2.Excel からインポート にトライしてみます。(Web スクレイピングからのデータ格納はまた別の機会に)

データテーブルの構築

データを格納するためのテーブルを早速構築していきます。UiPath Studio を開き、新しくプロジェクトを作成して、アクティビティでシーケンスを追加します。

そして、アクティビティから「データテーブルを構築」を追加します。adding-datatable

データテーブルを定義します。プロパティで出力の「データテーブル」で右クリックをして「変数の作成」をクリックします。そしてテーブル名を定義します。

create-variable「変数」を開くと定義されたデータテーブルがあり、データ型が「DataTable」となっていることがわかります。

check-data-type-of-table

データ列の設定

データテーブルをクリックすると、テーブルの列を定義できます。既定では Column 1(String) と Column 2 (Int32) が用意されているので、これらを Name (String) と Age (Int16) に変更します。

check-default-columns

まず Column 1 の鉛筆マークをクリックします。列を編集する画面になるので、列の名前を入力して、「null を許可」のチェックを外し、必須項目とします。これでOKです。

set-option-on-column1

次に Column 2 を編集します。同じように列の名前を入力して、データ型を「Int32」から「System.Int16」に変更します。年齢を入力する列で、Int32 だと大きすぎるので Int 16 に変えました。

set-data-type-to-int16

設定後は以下のようになりました。

データ行の追加

データテーブルの列を定義したら、今度は行に値を入れていきます。「データ行を追加」をアクティビティからシーケンスに追加します。


add-table-row

プロパティを開き、「データテーブル」に上記で作成したデータテーブル名を入力して、「列配列」で {}で囲って値を入力します。今回は簡単に{”Robert”, 34}と入力しました。

追加した行を出力してみます。繰り返し(各行)のループを追加して、
「要素」は row、「コレクション」をデータテーブル名とします。このループは、もしテーブルに行が複数入力されていたら、その行数回ループが実行される仕組みです。

ループ内で「メッセージをログ」を追加します。メッセージ内容は下図のようにしました

ループで取得した要素を使う場合は、 <要素名>.item(“列名”) (row.item(“Name”)) で取得して使えます。メッセージなので .ToString を最後に付けます。

add-msg

保存して実行しました。以下のような結果が表示されています。

output-log1

正しく表示されました。

While ループでテーブル行を連続入力

「データ行を追加」は1行しか追加できないので、複数行入力するために While ループと入力ダイアログを使って、ユーザーで連続入力できるようにします。

まずは「入力ダイアログ」を追加します。
「出力」に変数をいれて、型は Generic Value のままにしておきます。

add-input-dialog

次に「繰り返し(前判定)」を追加して、「Condition」を先ほどの入力インプットの結果が NA 以外の場合はループを繰り返すとします。
※ ここでは InputName.ToString <> “NA” と設定しています。

add-while-loop ループ内では、入力ダイアログで Age を入力するようにして、「出力」の変数を定義します。ここでのデータ型は System.Int16 とあらかじめ設定しておきました。

add-input-dialog-for-age「データ行を追加」で行を追加します。上述で入力インプットから取得した Name と Age を入力しましょう。ここでは {InputName.ToString, InputAge} としました。

insert-column-to-table最後にもう一度「入力ダイアログ」を追加しますが、これは Name を入力するダイアログなので上述したダイアログをコピペすればOKです。

add-input-dialog-name2これで後は最初に作成していた「繰り返し(各行)」でメッセージログを出力すれば結果を確認できます。

output-log-message

実行します。下図のように Name に NA と入れるまで何度も入力ダイアログが表示されます。2回入力して、3回目に NA として終了させました。

input-dialog-tries

結果を見ると正しくテーブルに追加されていました。

result

Excel をインポートしてデータテーブルを構築

今度は Excel からデータを読み込んで、データテーブルを構築します。新しくプロジェクトを作成して、シーケンスを追加してからはじめましょう。

Excel アプリケーションを利用する端末には Excel がインストールされている必要があります。もしインストールされていないと、以下のようなエラーが実行時に表示されてうまくいきません。

error-message

Excel アプリケーションスコープを設定

Excel 関連の操作を行う場合は、まず該当の Excel のパスを定義する必要があります。「Excel アプリケーションスコープ」を追加します。ワークブックパスのところに読み込みたい Excel シートのパスを指定します。

excel-application-scope

下図のような Excel を読み込むこととします。
※ 1行目は自動的にタイトル行として認識されます。

もし読み込めなかったことを考えて、Try Catch を使います。Catch で System.Exception の設定をして、ログとして記録することにしました。

try-catch

Try に「範囲を読み込み」を追加します。

add-read-excel

入力で、「シート名」と「範囲」を設定します。ここでは、”Sheet1″ の “A1:B6” の範囲を読み込むことにしました。また、出力でデータテーブル名を変数として定義しています。

read-excel-property

変数を開き、上記で設定したデータテーブルの「スコープ」を広げます。Try Catch 後にログとして結果を確認したいので、このように設定しました。

set-scope-global

あとは、今までと同じように「繰り返し(各行)」でテーブル行の結果を表示させます。

output-for-each

実行してみます。

result-excel

Excel に入力されていた値が正しく表示されました。

終わりに

ここでは、ユーザー入力とExcelの読み込みによるデータテーブルの構築方法をご紹介しました。次は Web スクレイピングをした結果をテーブル化して活用する方法を調査してご紹介します。

それでは、今回はここまで。