【UiPath】Read Rangeアクティビティの検証




Read Rangeアクティビティを細かく検証していこうと思います。
基本的なRead Rangeの使い方は以下のページを参考にしてください。
【UiPath】基本のExcelデータテーブル読み書き
【UiPath】DataTableからデータを抽出する方法

上記のページの内容より細かく、こういう場合どういう値が取得出来るのか、、などを検証していきたいと思います。
今回は以下の2つを検証してみます。
 ①いろんなパターンのカウントの取れ方
 ②型の取れ方

①いろんなパターンのカウントの取れ方

インプットとなるExcelの内容によってDataTableのカウント(件数)の取れ方がどのようになるのか検証してみます。

UiPathのワークフローは以下のように準備します。
Read RangeでDataTableを取得して(Add Headersあり、Range指定はなし)、そのCountをMessage Boxで表示させるだけのものです。

まず、最初は普通に以下のようなデータの場合。

この場合は普通に5ですね。

続いて、以下のようにヘッダーだけの場合。

この場合は0になります。

次に、以下のように1行抜けている場合。

この場合は5になりました。1行抜けていてもデータがあれば取得されますね。

続いては、以下のように、離れたところに注意書きコメントのようなものがある場合。

この場合はコメントのところまで取得されて、7となりました。

ちなみにこのDetaTableをそのままAddHeadersありでWriteRangeすると以下のようになります。
ヘッダーがない列にはColumn1から順番に値が割り振られてますね。

続いて、こんなデータで取得してみます。

すると、結果は、最初と同じく5になりました。ちゃんとデータがあるところからとってますね。

ただ、ReadRangeの指定を少し変えて、Rangeを”A1″にしてみると、以下のように6となりました。

これを先ほどと同じようにWriteRangeしてみると、こんな感じになります。

最後に、以下のように何もないデータを取得してみます。

すると、以下のようになりました。

1??これはちょっと謎ですね。
ちなみにこれをWriteRangeしてみると以下のようになります。なぜかColumn1だけ入る…。

さらにこの状態でもう一度動かしてみるとやっぱり1になり、B1に値をいれると0になります。
ちょっとこの辺の動きはよくわからないです。。ヘッダー行が値として見られちゃうみたいです。

以上、いろんなパターンのカウントの取れ方でした。
まず注意しなければならないのは、Excel内に変なゴミのデータが入っていないか、ですね。思ったよりカウントが多く取れてしまった場合は、Excel内にいらないデータが入っている可能性があるので、一旦行ごと削除とかして動かしてみるとカウントが正常になったりします。
あとは、Excelに何も書かれていない場合や、1列目のヘッダーしかない場合に不思議な動きをするので、気をつけた方がいいかと思います。

②型の取れ方

取得したDataTableの値が何の型になるのかを検証してみます。

UiPathのワークフローは以下のように準備します。
Message Boxの中は「sampleTable(0)(1).toString &” ” & sampleTable(0)(1).getType.toString」と記載しています。

まず、以下のExcelで動かしてみます。

すると結果は以下のようになります。B2の値とその型を表示しています。今回は普通に文字列なのでStringですね。

続いて、以下のように、数値にしてみます。

そうすると結果は、以下のようにDouble型となります。

次に先ほどと同じく、1ですが、今度はセルを文字列指定しておきます。

すると、この場合はString型となりました。

続いて、以下のような日付のデータの場合。(セルの型は日付になってます)

結果は以下の通り、DateTime型となります。

今度は、通貨型の場合。

結果は以下のようにDecimal型となりました。ちなみに¥マークはExcelで自動でつけられているものなので、それは消えてしまいます。

続いて、データが無かった場合。

結果はDBNullと入ります。

型の検証は以上ですが、ちなみに型を変換したい場合はAssignをいれてあげれば変換することができます。
以下の例ではStringに変えています。その他の変換の関数はVB.NETで検索してください。

以上、型の取れ方の検証でした。
これで注意しなければならないのは、DataTableで取得したときに、同じ列なのに違う型となってしまうことがあることですね。
数値しか入らないと思っていたところに文字列が入っていたりすると、その後にエラーが出てしまう可能性があります。(SelectできなかったりIfで失敗したり)それを回避するためには、一旦For Each Rowで回して型変換してしまうのがいいかと思います。基本的にどの型でも文字列には変換できるので、文字列に変換しておくのが安心かと。データが無い場合はNullと入ってしまうのも要注意ですね。
InvalidCastExceptionとかEvaluateExceptionというエラーが出た場合は、型関係でエラーになっている可能性があるので、確認してみてください。

以上、Read Rangeアクティビティの検証でした。
自分で検証するのが面倒だ!という時に参考にしていただければ、と思います。

他の機能一覧はこちら
他の作業一覧はこちら