Remove data rowで対象がずれてしまう

activities

#1

ExcelのA列に記載しているFALSE・TRUEの文字列がありますが、
Assign・For each・Remove data row を使い、TRUEの行を削除し、FALSEの行だけのテーブルを作成しようとしているのですが、なぜかFALSEの行も削除され幾つかTRUEの行が残ってしまいます。
ASSAINの箇所をTRUEからFALSEに変更するとうまくFALSEの行だけが削除されますが、TRUEの行の削除が出来ないので解決方法をご教示お願いします。
どんなものを使用しているかは、作成したシナリオとExcelを添付しましたのでご確認ください。
Main.xaml (13.6 KB)
test1.xlsx (1.3 MB)


#2

.NET Frameworkを使用しているとありがちなDataTable操作の失敗で、原因は割と単純です。
DataRawの配列(pick)を作成したタイミングで「何行目にTRUEの行があるか」という情報を格納しているのが、上の方にあるTRUEの行を削除することで、DataTable側の情報と、DataRow配列の持つ情報がズレていくことに起因します。

なので、現状のフローに近い形で確実に処理をしようとすると、「1行消す→pickを取り直す」になるのです、が・・・、データ量が多いとかなり時間がかかってしまいます。UiPathのActivityだけを使うならこれが正攻法なのですが。

別の方法として、UiPathのRemove Data Rowを使わず、 .NET Frameworkの「.Delete」および「.AcceptChanges」というメソッドを呼び出す方法があります。
.Deleteメソッド(命令)は「とりあえず削除したというフラグを立てる」だけで、データの実体そのものは削除されないので、後続の行番号等には影響を及ぼしません。いわば「削除保留状態」にするわけです。
そのかわり、必要な変更(削除のフラグ立て)が終わったら、DataTableに対して、保留状態の変更を呼び出すAcceptChangesメソッドを呼び出す必要が出てきます。

.Delete と、.AcceptChanges を使用したサンプルをつけておきますので、上記のフローとどちらが良いか検討してみてください。処理的にわかりやすいのは前者ですが、速度は後者が圧倒的に速いです。

Main.xaml (16.0 KB)


#3

Honokaさん
ご返信ありがとうございます。
サンプルもありがとうございます。
処理が速い方にして試してみたいと思います。