Webから取得した数値をexcelに転記する方法

webから毎週更新される任意の価格を取得し、指定のexcelに貼り付ける、というものを作っています。
指定のexcelファイルは下記の機能を持たせたいです。
1.webから取得した最新の価格は指定列の最終行に記載される.(添付画像)
2.(欲を言えば)前回と同じであれば処理を中断するメッセージを出す機能をつける

初心者につき、まだ2は着手できていないのですが、1までを作成した段階でデバッグをしたところ、エラーは出ていないようですが、価格がエクセルに入力されていませんでした。
Main.xaml (16.4 KB)

どこかおかしいところがあるはずなのですが、まだ知識が浅く自力で解決できません。
ご教示いただけますと幸いです。

excel image

こんにちは

エラーは出ていないようですが、価格がエクセルに入力されていませんでした。

直接的な原因は、セルに書き込みアクティビティは範囲プロパティに
アドレス(上記の図の場合"C457")を入力する必要がありますが、それの
計算ができていないことにあるかと思います。
(このアクティビティは、現在のセル位置に書き込むものではありません)

元のエクセルがどのようになっているかわかりませんが、例えばC列に対して
列を読み込みアクティビティを用いて、C行のデータ数を取得してから、
書き込むべきアドレスを割り出す、
あるいは、表全体を範囲を読み込みアクティビティでDataTableとして読み込み、
書き込むべきYear/Weekの行を特定したうえで、そこに値を入れ、最後に表ごと
EXCELに範囲を書き出しアクティビティで書き出す
等が考えられると思います。

早速に詳しくご教示いただきありがとうございます。
アドバイスいただいたアクティビティのキーワードを確認しながら、再度修正してみましたが、失敗してしまいました。
Main.xaml (16.4 KB)
前者(C列に対して列を読み込みアクティビティを用いて、C行のデータ数を取得してから、書き込むべきアドレスを割り出す)で試してみました。
c列を指定させて、ctrl+down→downキーで最終行に飛ばせる、という筋書きで作っていましたが、まだ欠けているところがあるのかもしれません。。

ちなみに後者のDataTableからの読込(「最後に表ごとEXCELに 範囲を書き出し アクティビティで書き出す」)は、一度webの価格表を表ごと読み込ませたうえで、エクセルに転記したい項目だけを指定セルに入力できる、という理解であっていますでしょうか。

お手数をおかけしすみません。。よろしくお願いいたします。

1 Like

こんにちは

UiPathのExcel Application Scopeで使うアクティビティとUI操作とは、一部の除き
直接の関係が無いものが多いです。
今回のケースも、これに該当し、 前述の通り「セルに書き込み アクティビティは
範囲プロパティにアドレス(上記の図の場合 "C457" )を入力する必要があります」
になります。

具体的には例えば以下のような実装が必要になります。

列を読み込みアクティビティの結果を受ける変数を用意し(このフィールド内で
CTRL+Kで作成できます。)、これをもとにLastCellの値を算定しています。
元のエクセルのファイルがどのようなものかわかりませんので、もし値がずれて
いればアドレスを計算している部分を修正する必要があります。

ちなみに後者のDataTableからの読込(「最後に表ごとEXCELに 範囲を書き出し アクティビティで書き出す」)は、一度webの価格表を表ごと読み込ませたうえで、エクセルに転記したい項目だけを指定セルに入力できる、という理解であっていますでしょうか。

いえ、表全体をDataTableとして読み込み、一部項目を追記して、最終的には表全体を書き込むイメージになります。
前者(現状)のロジックですと、例えば同じ週に誤って2回実行してしまうと、想定とは異なる行に値が書き込まれることになると思いますので、そのような観点からも後者のように書き込むべき行を特定してから、値を書き込んだ方が良いかもしれません。

1 Like

Yoichi様
こんばんは。
迅速かつ丁寧にご教示いただきありがとうございます。
お陰様で無事にエクセルに転記することができました。
これだけのことでも初心者にはかなりの労力ですが、できると感動します。

一方で、もう一つ初歩的な手違いがあることに気づきました。
ここでは最初にwebの指定の価格(週次で更新される)を取得するのですが、セレクターはその数字を覚えて取得しているので、毎週かわる最新値が得られません。
(例:8/21に「937」が最新だったので、その際「937」をセレクターで取得していたため、翌週になっても前週の数字を取得してしまう)

取得したい箇所は下記図の赤線同士が交わる箇所です。
同じ要領で他の地域の価格も取得し、上記の要領でexcelに転記していくので、
まずは最初の1つが完成できれば、、、と思っております。

質問ばかりですみません。最後にこの取得方法について、本やフォーラムから調べてみたのですが自力で解決できず、恐れ入りますが、ご教示いただけないでしょうか。
宜しくお願いいたします。

こんにちは

まずテキストを取得アクティビティのセレクターの画面を開いてください。

img20200831-7

この画面の下の方にあるUiExplorerで開くをクリックしてください。
以下の画面が出ますので、「要素を選択」をクリックして、要素を選びなおしてください。
すると以下のような画面になりますので、価格の部分のチェックを外し
rowName と TableColを選択してください。
本当はColumnNameを選ぶのが良いのですが、UiPathが一番上のShanghai…の部分を一列目と認識してしまっているため、一列ずれた名前になっています。(これはUiPathに問題があるように思えます)
そのため、この例ではTableColで指定しています。ただ単なる列番号は、例えばサイト側で列追加等があった場合に、変化を検知あるいは追随できませんので、本当にこの5列目がCurrent Indexであっているかをテキスト取得等で事前に確認した上で、TableCol指定すると良いと思います。
(頑張れば文字列から列数を自動的に割り出すことも可能ですが...)

これで保存すると、アクティビティ側に反映されます。

2 Likes

Yoichi様
こんばんは。
詳しいご説明を誠にありがとうございます。
教えていただいたように修正しましたところ、無事最新の数値を取得することができました!
同様の手順で残りの取得したい数値を同エクセルの別のセルに転記ができるよう、やってみたいと思います。
改めて、丁寧なご教示をいただきありがとうございました。大変助かりました。

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.