RPA体験談【実践編:DataTableから必要分を抽出する 該当が無い時Nullのエラー回避】

 

(2022/11/9追記)
.Count() と書いている箇所を .Rows.Count() と直しました。

(2021/10/6追記)
DataTableが空(=null)のまま、DateTableを動かそうとすると、
「オブジェクト参照がオブジェクトインスタンスに設定されていません」
というメッセージが出てエラーになります。回避するためには、いったんデータテーブルの件数の確認は必要です。
If (条件分岐)アクティビティで、DT.Rows.Count()>0 のチェックはしておきましょう。
(久しぶりに、UiPathを作成してハマりました。ちゃんと「Rows.Count」でチェックしていた筈が、上手くチェックできていませんでした。)

前々回、DataTableの中から必要分のみ抽出する方法として

以下を案内しました。Filterのイメージですね。
Assign(代入)
代入元: DT_Syori.Select(“[項目]= ‘”SearchWord + “‘”).copytodatatable
代入先: NewDataTable

前回の場合はNewDataTableは1行のみのDataRowになりましたが、
複数データが一致する場合も、もちろん使えます。

例えば、こんな感じです。
Assign(代入)
代入元: DT_Syori.Select(“[処理日付]='”+StringToday + “‘”).copytodatatable
代入先: DataTableNow

その前に、以下の設定が必要ですね。
Assign(代入)
StringToday:DateTime.Now.Date.ToString(“yyyyMMdd”)

ただし、copytodatatableを実施する際に、該当が 0件だとエラーになります。
NullReferenceException というエラーメッセージですね。

ですので 0 になる可能性がある場合は、以下の設定が必要になります。
If (条件分岐)アクティビティで
DT_Syori.Select(“[処理日付]='”+StringToday + “‘”).Rows.Count()>0 を 追加してください。
前々回みたいにRPA体験談【実践編:Input dialog(入力ダイアログ)の選択肢にExcelの一覧を使う】の場合は完全一致なので問題無いのですが、
大抵の場合は、エラー回避処理はしておいた方が良いと思います。

ちなみに全体で何行あるかカウントするなら
DT_Syori1.Rows.Count で数えられます

 

↓2021/4/29追記
◆項目を限定してコピーする場合/重複を除く場合

なお、項目を限定してコピーするなら、 DefaultView.ToTableを使います。
Assign(代入)
代入元: DT. DefaultView.ToTable(False,”列名1″,”列名2″,”列名3″….)
代入先: NewDT

重複を除く場合は、「True」を指定します。
Assign(代入)
代入元: DT. DefaultView.ToTable(True,”列名1″,”列名2″,”列名3″….)
代入先: DTDistinct
※こんな時に使いました。
【一人複数件の処理】
重複除外(DTDistinct):処理前に一人ずつの状況を呼び出し印刷(PDF保存)
元のテーブル(DT):一人ずつ数件処理
重複除外(DTDistinct):処理後に一人ずつの状況を呼び出し印刷(PDF保存)

 

 

↓日記の目次を作りました。
RPA体験談【目次(主にUiPath)】

 

 

 

次へ 前へ