gorby
(RPA Ninja)
July 26, 2023, 1:43am
1
UiPath Studio 2023.6.1 Community Editionを利用中の初心者です。
1.WFの説明
https://www.rpachallenge.com/?lang=JA
のサイトにExcelから顧客データを1行ずつDataRow変数に読み出して書き込むWFを作成中です。
2.質問内容
過去の開発経験では、このような場合Excelに空文字が存在する場合が多かったことから、空文字の場合Webへの書き込みをスキップする仕様にしたいと考えています。
1行すべて空文字の場合は、Else Ifアクティビティの条件文に下記の条件文(*注1)を記入して、Thenブロックで行を数えるレコードカウンタを+1すれば
対応可能なことが分かりましたが、添付画像黒丸のように、1行の途中まで連続して空文字が存在する場合に、WFでどのようにスキップ可能か分かりません。
列名をRow番号やItem番号に途中で変換する必要があるのでしょうか??
分かる方、ご指導いただけますと助かります。
注1:
String.IsNullOrEmpty(String.Join(String.Empty, dr_TransactionItem.ItemArray.Select(Function(c) c.ToString)))
※dr_TransactionItemはDataRow変数
Yoichi
(Yoichi)
July 26, 2023, 1:51am
2
こんにちは
何列目までチェックが必要でしょうか?仮にn列目までをチェックするとすると
dr_transactionitem.ItemArray.Take(n).All(Function(o) o is Nothing OrElse o.ToString="")
でチェック可能かと思います。
ちなみにすべての列の場合は以下になります。(Takeが不要)
dr_transactionitem.ItemArray.All(Function(o) o is Nothing OrElse o.ToString="")
gorby
(RPA Ninja)
August 1, 2023, 9:59am
3
すみません、スキル不足で実装方法がいまひとつよく分かりません。
dr_transactionitem.ItemArray.Take(n).All(Function(o) o is Nothing OrElse o.ToString=“”)
上記の構文ですと、おそらく繰り返しアクティビティの中でTake(n)のnを1から7まで回して上記の構文がTrueなのかFalseなのか、
逐一調べないといけないと思いますが、繰り返しアクティビティの中はどうなりますでしょうか?
個人的には添付画像のSwitchアクティビティにつなげたいと考えています。
ご参考までに空文字が入ったExcelも添付します。
Yoichi
(Yoichi)
August 1, 2023, 10:18am
4
こんにちは
すみません、要件を正しく理解していないかもしれません。
行方向の各データの入力をスキップしたいということでしたら、
基本的にはデータのある列番号を配列に格納しておき
それをForEachでイテレートすると、データのある列のみを
入力することが可能です。
例えば実装は以下になります。(入力箇所の代わりにメッセージボックスになっています)
arrColIndex = CurrentRow.ItemArray.Select(Function(o,i) Tuple.Create(o.ToString,i)).Where(Function(t) not String.IsNullOrEmpty(t.Item1)).Select(Function(t) t.Item2).ToArray()
ただこの場合、セレクター情報も配列等にしておく必要があるかと思います。
gorby
(RPA Ninja)
August 3, 2023, 8:23pm
5
セレクター情報をリスト変数に変換するイメージが湧きません。
例えばDataRow変数dr_transactionitemの値がNotnullだった列データをリスト変数lis_NotNullに変換するにはどうすれば良いでしょうか?
列番号と列名の対照DataTableも必要な気がしますので、難しそうです。
お手数ですが、サンプルコードでお示しいただけると助かります。
Yoichi
(Yoichi)
August 3, 2023, 11:25pm
6
セレクター情報をリスト変数に変換するイメージが湧きません。
arrSeletorString ={"<webctrl tag='A'/>" , "<webctrl tag='IMG'/>"}
のような配列をあらかじめ用意しておくということです。
例えばDataRow変数dr_transactionitemの値がNotnullだった列データをリスト変数lis_NotNullに変換するにはどうすれば良いでしょうか?
値のリストだけあっても、それをどこに入力すべきかがわからないので、上記は不要かと思います。
上記のアプローチは空ではない列の列番号を返す配列です。
arrColIndex = CurrentRow.ItemArray.Select(Function(o,i) Tuple.Create(o.ToString,i)).Where(Function(t) not String.IsNullOrEmpty(t.Item1)).Select(Function(t) t.Item2).ToArray()
これがあれば、上記のセレクター文字列の配列と組み合わせれば、どこに入力すべきかもあわせてわかります。
もしindexによるアプローチが直観的でないなら、Dictionaryを使っても良いと思います。
gorby
(RPA Ninja)
August 6, 2023, 11:06am
8
済みません。
DataTableから抽出したDataRow変数の値をWebサイトに転記する際にエラーが発生した場合にリトライをさせるため、現在DataRow変数の値をWebに転記しています。
ご教示いただいた方法はDataTableを回していますが、DataTableから1行抽出したDataRow変数(dr_transactionitem)を使う場合のサンプルコードはどうなりますでしょうか?
DataRow変数の場合も、空ではない列の列番号を返す配列と、セレクタ情報の配列を作成すれば、空ではない配列の値をWebに転記できるでしょうか?
もし、DataTableの値から空でない値のみString変数に抽出できれば、String変数にを使う場合のサンプルコードでも構いません。
Yoichi
(Yoichi)
August 6, 2023, 12:40pm
9
ForEachRowのCurrentRowはDataRow型なので、その部分だけを使えば良いかと思います。
gorby
(RPA Ninja)
August 6, 2023, 4:35pm
10
Yoichi:
その部分だけを使えば良いかと思います
済みません。
添付画像黒丸のイメージが湧きませんので、サンプルコードをご教示いただけないでしょうか?
また、UI Exploreのセレクターエディターで、{{arr_Selector_String(int_index)}}のような配列を意識した記述が許されるのでしょうか?それとも、一度、他の変数にコピーして使わないとだめですか?
Yoichi
(Yoichi)
August 6, 2023, 11:17pm
11
例えば以下の様になると思います。
また、UI Exploreのセレクターエディターで、{{arr_Selector_String(int_index)}}のような配列を意識した記述が許されるのでしょうか?それとも、一度、他の変数にコピーして使わないとだめですか?
UiAutoamtionのバージョンにもよるかもしれませんが、実際に試してみるとセレクターエディタ上では通らないことが分かると思います。
gorby
(RPA Ninja)
August 7, 2023, 1:13am
12
ちょっとあいまいな日本語のため、確認をさせてください。
Else Ifアクティビティの条件文で、1列目と2列目が両方空文字かどうかをチェックする構文は下記で合っていますか? 以下DataRow変数をrowと表現します。
(row.ItemArray.Take(0).All(Function(o) o is Nothing OrElse o.ToString=“”) AndAlso (row.ItemArray.Take(1).All(Function(o) o is Nothing OrElse o.ToString=“”)
Yoichi
(Yoichi)
August 7, 2023, 2:30am
13
当該DataRowの0列目と1列目がともに空かどうかを確認したいということでしょうか?そうであればLINQのTakeやAllは不要です
gorby
(RPA Ninja)
August 7, 2023, 3:10am
15
Yoichi:
そうであればLINQのTakeやAllは不要です
スキル不足でおっしゃっている意味が分かりません。
当該DataRowの0列目と1列目がともに空かどうか、確認するコードをご教示いただけないでしょうか?
Yoichi
(Yoichi)
August 7, 2023, 3:12am
16
例えば以下になると思います。
(row(0) is Nothing OrElse row(0).ToString()="") AndAlso (row(1) is Nothing OrElse row(1).ToString()="")
gorby
(RPA Ninja)
August 7, 2023, 3:19am
17
Yoichi:
例えば以下になると思います。
ご教示ありがとうございます。
参考までに教えてください。
下記2つはまったく同じ意味でしょうか?
row(1) is Nothing OrElse row(1).ToString()=“” ->2列目が空文字かチェック
row.ItemArray.Take(1).All(Function(o) o is Nothing OrElse o.ToString=“” ->2列目が空文字かチェック
gorby
(RPA Ninja)
August 7, 2023, 3:39am
19
追加でご教示ください。
添付画像の構文はList変数では表現できないという認識ですが、合っていますでしょうか?
Yoichi
(Yoichi)
August 7, 2023, 3:41am
20
質問の意図良くわかりませんが、最後のToArrayをToListにすればList<Int32>型で返すことはできます。
gorby
(RPA Ninja)
August 28, 2023, 9:53am
21
こんにちは。いつもお世話になっております。
やりたいことは、Excelシート(添付したchallenge_ja.xlsx)からWebサイト
https://www.rpachallenge.com/?lang=JA
にデータ転記する際に、ExcelのセルがNullOrWhiteSpace
の場合に自動でスキップすることです。Excelから読み込んだi_dr_TransactionItemをFor eachで回して、列ごとのNullチェックをやっています。
入力項目ごとにひとつずつType IntoアクティビティをElse Ifアクティビティで囲んで、
Not String.IsNullOrWhiteSpace(i_dr_TransactionItem(“苗字”).ToString)
の場合に、Type Intoアクティビティを実行でも良いのですが、もっとスマートにExcelのセルがNullOrWhiteSpaceである箇所を事前に調べて、そこ以外のセルデータをWeb転記するアルゴリズムができないか、考えています。
有識者の方から教えていただいた知見をもとに、サンプルコードを作成したので、動きそうかどうかコメントをお願いします。
challenge_ja.xlsx (21.7 KB)
Yoichi
(Yoichi)
August 28, 2023, 2:10pm
22
こんにちは
この情報からだけですと判断できません。アンカーの情報もわかりませんので。
実際に実行してみる方が早いのでは、と思います。