こんにちは。UiPath初心者です。
今回実行したい処理は以下の通りです。
① エクセルファイルを選択しDataTableに格納(複数カラムあり)
② ウェブサイトにある表形式のデータのなかでDataTableの3カラムと内容が一致するものを探す
③ 有 ⇒ 同一行の背番号を取得し変数に格納する
無 ⇒ 次へボタンを押下し次ページの表の中で探す(見つかるまで繰り返す)
④ ③で格納した値をExcelの背番号の行に記載する
…DataTableの各行繰り返す
現在DataTableへ格納するところまではできているのですが、
ウェブサイト上で複数項目を検出し、同一行・別の列の値を取得するのに苦戦しています。
よろしくお願いいたします。
Yoichi
(Yoichi)
September 25, 2024, 11:23pm
2
こんにちは
要件がやや不明確と思います。
3カラムとは特定の3つのカラムでしょうか?あるいは任意のカラムのうち3つが一致すれば一致と見なすのでしょうか?
また複数行がマッチした場合はどのようにするのでしょうか?
上記が入力例を表しているのであれば、期待する出力もあわせて例示いただくと良いかと思います。
洋一さん
ありがとうございます。
特定の3つのカラム(row(“氏名”).ToString、row(“氏名カナ”).ToString、row(“年齢”).ToString)が完全に一致するものの
背番号の値を取得し、Excelに書き出したいです。
上記の添付画像でいうと、DataTableの背番号部分(実際に表記したいのはExcelなので
Excelアプリケーションスコープを使用し、変数に格納したウェブサイトの背番号を転記する想定です)
期待する結果(背番号に値が入る)
よろしくお願いいたします。
Yoichi
(Yoichi)
September 26, 2024, 12:53am
4
こんにちは
2重ループを回すか、効率化悪そうなら例えば以下の様にDictionaryに入れてからループすると良いかもしれません。
dict = dt2.AsEnumerable.ToDictionary(Function(r) Tuple.Create(r("氏名").ToString,r("氏名カナ").ToString,r("誕生日").ToString),Function(r) r("背番号").ToString)
Sample
Sample20240925-2.zip (11.1 KB)
洋一さん
ありがとうございました。内容を確認させていただきましたm(__)m
添付していただいたものはどちらもExcelファイルを参照しているかと思いますが
今回追加したい機能はウェブサイトから対象のデータを見つけ出し
対象データの『背番号』を取得しExcelに吐き出すというものなので
少し違うかもしれません。こちらの質問の仕方が悪く申し訳ありません。
ウェブサイトにある表から抽出となると、
HTMLとかから判断するのでしょうか…?
実際に使用するサイトの表は載せられないので
同じようなサンプルを作成してみました。
対象データが無ければ『次へ』ボタンを押下し、対象データを検索…
対象データが見つかれば『背番号』を取得し、見つからなければ
『対象データが見つかりません』としたいです。
よろしくお願いいたします。
Yoichi
(Yoichi)
September 30, 2024, 6:28am
6
表抽出機能でDataTableに落とし込めば同様の手法が使えますが、他の方法を検討されていますでしょうか?
洋一さん
ありがとうございます。
特に方法にこだわりはございません!
初心者ですので『背番号』の取得ができれば何でもいいと思っております。
表抽出機能でDataTableに落とし込み、DataTable内をループして
対象データを探す…というようなイメージでしょうか?
よろしくお願いいたします。
Yoichi
(Yoichi)
September 30, 2024, 6:43am
8
基本的にはそうです。
状況によっては表抽出の代わりに繰り返し(各UI要素)アクティビティも使えるかもしれません。
初歩的な質問で申し訳ないのですが
表抽出自体どのように行えばいいのかわからず…
試しにカラムを選択したところ、表にあるすべてのカラムが選択されました。
きっとこれで表の抽出が行われDataTableに格納されたということでしょうか?
またExcelのrow(“氏名”).ToString、row(“氏名カナ”).ToString、row(“年齢”).ToStringと
表抽出したカラムの氏名、氏名カナ、年齢と同じもの…という条件の指定の仕方や
ループのやり方がいまいちよくわかりません。
Yoichi
(Yoichi)
September 30, 2024, 7:09am
10
表全体を抽出することもできますし、個別に抽出することもできます。
うまく取れていれば、上記サンプルの範囲読み込みアクティビティの代わりにウイザードで生成された、表抽出でのアクティビティを設置すれば良いかと思います。(デフォルトのDataTableの変数名が異なると思いますので、そこは合わせる必要があります。)
表がうまくて取れていない場合は、カラム名を個別設定等する必要があるかもしれません。
The UiPath Documentation Portal - the home of all our valuable information. Find here everything you need to guide you in your automation journey in the UiPath ecosystem, from complex installation guides to quick tutorials, to practical business...
ありがとうございます!
フローチャート内で
-シーケンス-
① 表抽出(表示されているページのみ)
② 対象データがあるかどうかループ
-対象データあり-
③ 対象データと同一行の『背番号』を取得
-対象データなし-
③ 次へボタンを押下
④ 表抽出(表示されているページのみ)
…対象データが見つかるまで繰り返す
⑤ 対象データと同一行の『背番号』を取得
(⑥ 見つからなければ『対象データが見つかりません』)
というように作成しようと思ったのですが
『複数のページ/行が設定されていますが、[次へ]ボタンが設定されていません。』
という警告が表示されてしまいます。
こちらは次へボタンを活用すべきなのでしょうか?
Yoichi
(Yoichi)
September 30, 2024, 9:52am
12
今回のケースですと、一括でDataTable化しても問題なさそうにおもえるのと、次へボタンもあるようなので、使った方が良いように思えます。表抽出wizardで複数ページの確認があったと思いますので、こちらを利用ください。
ありがとうございます。
次へボタンを活用することにいたしました。
この後、繰り返し (データ テーブルの各行)を使用して、DataTableに表抽出で選択したテーブルを設定し、選択したExcelより取得したDataTableの(row(“氏名”).ToString、row(“氏名カナ”).ToString、row(“年齢”).ToString)とイコールのもの。という条件を設定するのだと思うのですが、この場合、条件に設定するカラムはどのようにすればいいのでしょうか?
両方とも同じカラム名のため、区別のつけ方がわかりません。
質問ばかりで申し訳ありませんがよろしくお願いいたします。
Yoichi
(Yoichi)
September 30, 2024, 11:31pm
14
こんにちは
どの方法で実装しようとしていますか?Dictionary使う方法の場合は、先のPOSTのサンプル参照してもらえれば良いかと思います。
2重ループで構成しようとしているなら、例えば繰り返し(データテーブルの各行)アクティビティなら、Itemの変数名で区別するようにします。(異なる変数を明示的に指定します)
洋一さん、ありがとうございます。
Dictionaryを使用して背番号を取得することにいたしました。
以下の部分について質問なのですが、この処理は
イコール row(“氏名”).ToString、row(“氏名カナ” ”).ToString、row(“年齢”).ToString
と同一行の背番号を取得しrow(“背番号”)に格納しているのですよね。
いつもExcelに何か書き込む際は『Excelアプリケーションスコープ』⇒『セルに書き込み』
としているので、どの値をどこに書き込むか?という指示が必要なのですが
この『範囲に書き込み』だと、どの値を…という設定は必要ないのでしょうか?
今回、選択したエクセルファイルをDataTableに格納する際、
2行目以降をDataTableに格納するようにしています。
DataTableの1行目はカラムになるため、対象データの検索は2行目以降になり
背番号を書き込みたいのも2行目以降となります。(Excelでは+1行)
この場合、書き込み行に指定するのはDataTableの行数で考えるのでしょうか?
Yoichi
(Yoichi)
October 1, 2024, 3:24am
16
表全体を書き出しますので、表の書き出し始点を指定すれば、個々のセルのアドレスは考慮する必要はありません。(表の情報がそのまま反映されます)
洋一さん
ありがとうございます。
上記のものを実行したところ
『代入: 同一のキーを含む項目が既に追加されています。』というエラーが発生しました。
これはどういうことなのでしょうか?
Yoichi
(Yoichi)
October 3, 2024, 3:17am
18
こんにちは
同じ3項目の組み合わせの行が複数あるためです。
これらの行の背番号はどのようになっていますか?同じであれば重複排除のロジックが必要です。
異なるものであれば、どの背番号を入力すべきかのルールが必要です。
一度ウェブサイトの表を抽出テストしたものをExcelに貼り付け確認しましたが
重複するものはありませんでした。
ただ、一点気になるのがおそらくヘッダー部分でしょうか?
以下のようなものが600行弱あります。
ウェブサイトでの背番号はリンクになっており、クリックすると選手情報が
見られるような仕様になっていますが一度表をDataTableに格納しているため
あまり関係はないですよね?
よろしくお願いいたします。
Yoichi
(Yoichi)
October 3, 2024, 3:51am
20
上記の表ですが、もともと提示いただいた内容とかなり乖離していると思いますが、これが取得したい表でしょうか?(氏名等があるものと思いましたが)
また空白行がありますので、こちらも除去する必要があると思います。