LoginSignup
5
6

More than 3 years have passed since last update.

【UiPath】メソッドを呼び出し(Invoke Method)を使わないDataRowのコピー

Last updated at Posted at 2021-04-24

はじめに

この記事の執筆は以下の環境で行っています。
UiPathStudio 2021.4.1-beta.177(Community License)
UiPath.Excel.Activities 2.10.4
UiPath.System.Activities 21.4.0
言語:日本語

なにをするの?

DataTableの行を別のDataTableに追加する方法について記述します。

『UiPath データ行のコピー』という検索ワードでヒットする内容では、「メソッドを呼び出し(InvokeMethod)」アクティビティでImportRowというメソッドを使用する方法が紹介されていますが、この記事では「データ行を追加(Add Data Row)」アクティビティのみで完結させる方法を紹介します。

やりたいこと

例えば以下のような家計簿のデータを読み取り、、、
image.png
金額が一定額を超えたデータだけを集めた表を作りたい。
image.png
そんなケースを想定しています。

やりかた

「繰り返し(データテーブルの各行)(ForEachRow in DataTable)」を使用して、dt_家計簿を1行ごとにチェックして、条件に合致した場合のみ「データ行を追加(Add Data Row)」でdt_使いすぎに行データをコピーします。
image.png
この時、「データ行を追加(Add Data Row)」のプロパティには下記のように設定をします。
image.png
「列配列」にCurrentRow.ItemArrayと設定するのがポイントとなります。

処理中の行をコピーするので、「行」にCurrentRowと設定したくなりますが、その場合は実行時に下記のエラーが出てしまうので注意してください。
この行は既に別のテーブルに属しています(This row already belongs to another table.)
image.png
.ItemArrayと付けることで「行データ」がテーブルに属さない「列配列」に変換されるので、上記のエラーを回避できます。

補足

CSV以外を読み取ったらどうなるのか

.ItemArrayの返り値はObject型の配列になるので、元のDataTableの列に型が設定されている場合は、きちんと型の情報を保持してくれます。
下記は今回元データとしたCSVファイルに対して、金額列を数値に書式設定した後にExcelファイルとして保存したものをdt_家計簿_Excelとして読み取ったものです。
ウォッチパネルを使ってUiPath内でどのように読み取られているか直接確認してみます。
image.png
3434という数字がDataTable内でDouble型になっており、.ItemArrayで変換した後も型情報を保持している事が確認できました。

参考:DataRow.ItemArrayについて

複数ファイルから値をまとめることもできます

説明の中では1ファイルを対象に絞り込むことだけを行いましたが、202101.csv、202102.csv、202103.csvを順に読み込んで、dt_使いすぎに複数ファイル分のデータをまとめることもできます。
実際のロボット開発で使うケースでは、こちらのケースの方が多いかもしれません。
image.png

まとめ

データ行を追加(Add Data Row)アクティビティで、あるDataTableの行を別のDataTableに追加したい時にエラーが起きてしまう場合は、行データ(DataRow)列配列(Object[])に変換することでエラーを起こさず追加ができます。

終わりに

メソッドを呼び出し(InvokeMethod)アクティビティは便利ですが、メソッド名の入力時に入力補完が出ないので慣れないうちは使うのが難しいアクティビティです。
今回記事にまとめようと思ったのは、そんな難しいアクティビティを使わずにできる方法を発見した驚きを共有したいと思ったからです。

「データテーブル間のデータのコピー」と言うのは自動化の中でよく使う処理になるので、開発中に誰しも躓いて検索するポイントなんじゃないかと、個人的に思っています。
この記事が、そんな誰かの助けになれば幸いです。

5
6
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
5
6