文字を入力アクティビティの使い方について

UiPath初心者です。

以下のExcel元データを作成しました。
使用者は、A列とD列(B列へ反映)へ入力。

image

その後、下記 文字を入力アクティビティで社内システムへ入力。
image

ここまで作成したのですが、
実行してみると、

入力すべき欄へ、最初は 2020-11-02 と出るのですが、1秒も置かず
YYYY-MM-DD となり、エラーとなりました。
このような場合元データを数式を使わず直接入力すれば
エラーはなくなりますが、
社内システムへは、文字列 YYYY‐MM‐DD での入力が必須で、
作業効率より、別の列へ入力→数式で反映にしていました。

このエラーの解消方法を教えて頂きたくよろしくお願いいたします。

「キー入力間の待機時間」を設定してみてはいかがでしょう?

ありがとうございます。
システムへの入力が、日付が入力される訳ではなく、
『指示したい日付を作るための数式』になっているようなのです。

こんにちは。横から失礼します。

まずはここを本当かどうか確定させたいですね。
文字を入力の直前に、入力しようとしている納期変更.Rows(0).Item("納期").ToString
「1行に書きこみ」アクティビティ等で出力してみて、
どんな内容を文字入力しようとしているか確認してみるといいかもしれません。

もし設定されている文字列が正しければ文字の入力方法をあれこれトライする方向になりますし、
数式が設定されているようであればExcelの読み取り方を確認していく方向に観点をシフトしていけます。

ありがとうございます。
入力する元データを、
B列へ
’2020-11-02
など直接文字列入力すれば、繰り返し作業が全て行われる状態です。

問題なく動く時の、元Excelファイルです。
image

そうですね。
では、問題があるときの
納期変更.Rows(0).Item("納期").ToStringの値はどのようになっているでしょうか?
Excel上ではなく、UiPathが変数に格納している値です。

1 Like

1行を書き込み で落としてみると以下の通りでした。
値がおかしいです。。
image

本来2020がはいるところがYYYYになっている!
となると、EXCEL側のTEXTがおかしいか、範囲を読み込みアクティビティがおかしいか。。。

@HANACCHI 様フォローありがとうございます。

うーん、試しにこちらでExcel(私の環境は2013)で、
示されている関数を入力したExcel範囲を読み込みしてみたら普通に取得できますね。

@miwa_yamamoto
ふと気になりましたが、ExcelのA列とD列への値入力はStudioで「実行」する前に入力されますか?
それとも実行後にUiPathが行います?

ありがとうございます。
Excelへの入力はStudioで「実行」する前です。納期変更.xlsx (24.2 KB)

EXCELアプリケーションスコープを使うと正しい値が取れました

2 Likes

こんにちは

System - File - Workbook - ReadRangeアクティビティのバグっぽいですね。

どうやら.netの日時形式文字列として処理されているようですので
元のEXCELのワークシートを修正できるのであれば

=IF(D2="","",TEXT(D2,"yyyy-MM-dd"))

のように yyyy-MM-dd とするとよさそうです。

3 Likes

ありがとうございます、ああーなるほど・・。
こちらでも再現確認できました。

@miwa_yamamoto
ということで、 Excelの範囲を読み込むときの問題のようですので、Excelの数式を直すか、
あるいはExcelの読取方法を
Excelアプリケーションスコープの「範囲を読み込み」に変更するかといったところですね。
問題をひっかきまわしてしまってすみません。

1 Like




Yoichi


row

データテーブル内の繰り返し処理ってどんな感じになってるでしょうか?
可能であれば繰り返し部分が見わたせるような画面キャプチャが欲しいところですね。

根拠はなく、なんとなくですが、
・ループ構造に繰り返し(各行)が使われていない
(繰り返し(前判定/後判定)を使用している)
・Excelの読み込んでいる範囲が適切でない
(超広い範囲を実は読み込んでいる)
・設定しようとしている変数の指定の仕方がおかしい
(ループの中で「納期変更.Rows(0).Item(“納期”).ToString」を使用している)
辺りがありそうな気がします。

1 Like

ありがとうございます。

データ読み込みがこちらになります。
image
繰り返し部分はこちらになります。
ご指摘のものが当てはまります。。。
⇒(ループの中で「納期変更.Rows(0).Item(“納期”).ToString」を使用している)
このままでは使えない状態だったのでしょうか。。

おそらく以下の二つの要素の合わせ技ですね。

1.データテーブル「納期変更」の件数を確認してみてください。(テーブル名.Rows.Countで取ったりデバッグで確認してみたり)
多分ですが中身が空の行が大量に、1000行くらい入っているのではないでしょうか。

2.「納期変更.Rows(0).Item(“納期”).ToString」は
「"納期変更"データテーブルの0行目(人間的なカウント方法でいうところの1行目)の"納期"列を文字列化したもの」を示しますから、
ループの中で使ってしまうと何周目でも常に0行目を取得してしまいますね。
せっかく繰り返し(各行)で納期変更テーブルの各行を、rowデータロウに切り出しているのですから、
それを使っていきましょう。(今回でいえばrow.Item(“納期”).ToStringなどにしてやればいいと思います)

データテーブルとデータロウの扱いはUiPathを使う中で結構重要なポイントになってくると思っていますので、
早めに手の内に入れておくことをおすすめします。

1 Like

ありがとうございます!

ご指摘の通りです。
空の行が大量に入っています。
どのようにすれば、外せますか。

また、「納期変更.Rows(0).Item(“納期”).ToString」の方、ありがとうございます。
教えて頂いた方法で直りました!!!

今は、書いている部分を繰り返した後、空白を繰り返し入力しています。

読み込み範囲が「A:B」になっているのでUiPathが解釈して読み込む行範囲を決めていますが、
今回、A列に書式が設定されている(セル色設定)ので、Excel的な最終行までを読み込んでしまっているように思われます。

もしA列が入力必須項目なようであれば、こちらの手段でA列に値が入っている最終行を取れますので、
これで読み込む範囲の最終行を定義してやるといいと思います。

1 Like