JayT
(JayT)
1
ver. 2023
モダン・エクスペリエンス
Excelの「フィルター」アクティビティで、画像の赤枠のような型違いエラーが出ます
【やろうとしていること】
CSVの2列目にある取引先名をRows(1)で取得し、Excelファイルの請求書明細で、その名称と合致するB列でフィルタをかけ、最終的に請求書に書き込む前にD列の金額を集計する
【ひっかかっているところ】
クラシックUIのときの「テーブルをフィルター」の記述を参考にし、モダンの「フィルター」アクティビティの「フィルタ設定」に、フィルターのトリガーとして
New String(){companylist.Rows(1).ToString()}
と記載しました。
しかしこれでは、画面のようなエラーが出ます。
ちなみに「フィルタ設定」ボタンを押した画面に、明示的に
“アンダースコア株式会社”
と入れると、エラーは出ません。、
モダンでフローをつくるのは初めてなのですが、CSV(会社名リスト)から取得位した会社名を、「フィルター」アクティビティの「フィルタ設定」窓に記述するにはどのようにしたらよいでしょうか?
Yoichi
(Yoichi)
2
こんにちは
この部分はString型になるかと思いますので単に
companylist.Rows(1).ToString()
でエラーは出なくなると思います。
JayT
(JayT)
3
フィルターのキーワードは認識され、最初のエラーは出なくなりました。
ありがとうございます。
しかしフィルタするExcelの列(B列)を認識しないエラーが出ます。
以下の3つを「列名」欄に入力して試してみました。
CurrentRow.ByField(“取引先”)
を列指定すると、
列が存在しません
CurrentRow.ByIndex(1)
列が存在しません
Excel請求明細.Sheet(“Sheet1”).Cell(“B1”)
表と重なる範囲をフィルター対象とすることはできません
左の黄色いところは、CSVから読み込んだ取引先名は認識しているようです。
あとはこの値(取引先名)でExcelの請求明細をフィルタリングしたいのですが、
なにが間違っているのでしょうか?
Yoichi
(Yoichi)
4
こんにちは
全体のロジックがよくは把握できていませんが、列名は単に ”取引先”
でよいのではないでしょうか?
フィルターの設定で、フィルターしたい文字列を指定するので、そこで各社名を入れるイメージでしょうか?
JayT
(JayT)
5
列名は単純に"取引先"としたところ、エラーは消えました。
ありがとうございます。
ただフィルタリングはされていないようです。
ソース欄は、何を記述したらよいのでしょうか?
下記の黄色い記述(テーブル1を指定)では、何も値が取れていないようにみえます
Yoichi
(Yoichi)
6
フィルターしたい値は何になりますでしょうか?
companylist.Rows(1).ToStringですと文字列が返りますので文法としてはあっていますが、中身が期待するものではないと思います。
例えばアンダースコア株式会社にしたいのであれば
companylist.Rows(4).Item(1).ToString()
になるのではないかと思います。
JayT
(JayT)
7
取り出せずにいます
モダンのリファレンス本届いていま1行づつ動作ひもとき中ですので、ちょっと閉めずにおかせてください
モダンで書かれた本以外と少ないみたいです
JayT
(JayT)
8
これの意味がようやくわかりました。
”アンダースコア株式会社”は、フィルターにかけるテーブルの5行目
=Rows(4) すなわち 0>1>2>3>4
番目であり、
Item(1) はその左から2番めのアイテムという意味で合ってますでしょうか?
で、これでRUNすると、一瞬にしてシーケンスが終了します(エラーは出ません)
このフィルタ作業では、CSVから取り込んだ会社名でフィルタをかけて繰り返しをしたいのですが、新しい会社名を取り込む場合、以前のクラシックの教本ではフィルタに
New String(){row(1).ToString()}
と記述しました。
しかしこれでは、rowが宣言されていないとエラーが出ます
画像のようにRowsにしても同じでした。
やりたいことは画像内に青字で記載し、今回出たエラーは赤枠で示しました
どうしたらCSVから得た会社名で、繰り返し「テーブル1」でフィルタを行えるのかで2日つまっています。
Yoichi
(Yoichi)
9
こんにちは
やりたいことを勘案しますと、以下のようになるのではと思います。ご確認ください。
JayT
(JayT)
10
ありがとうございます。
同じ画面をつくってみようとしましたが、2つ苦戦しています
1)黄色いところ:
For Each Row in Data Table のアクティビティのアイコンとレイアウトデザインが示していただいたものと異なっていて、これを使用してよいのかがわかりません
2)フィルターのアクティビティで、画像のような警告メッセージが出ます
Sourceがシートではなく、テーブルを指定すれば消えるかと思い
Excel請求明細.Table(“テーブル1”)
と記述しましたが、やはり同じエラーメッセージが出ます。
UiPathバージョンは 2023.10.0 ですが、挙動が異なっているようにもみえます。
どこに手をつければよいか、スタックしてしまっています。
Yoichi
(Yoichi)
11
こんにちは
こちらは問題ありません。WindwosプロジェクトとWindowsレガシープロジェクトの差異かと思います。
2)フィルターのアクティビティで、画像のような警告メッセージが出ます
参照しているファイルなどは正しそうでしょうか?
このエラーの出現条件が不明なので、可能でしたら現在のプロジェクト一式をzipファイルなどで共有いただけると良いかと思います。
JayT
(JayT)
12
ありがとうございます
https://drive.google.com/drive/folders/1Q-VhfLAc4hNe2xFEaUAUkkdKXJ6H-FAv?usp=sharing
共有フォルダにZIPを置きました。編集権限あるので、取っていただいたらテキストファイルを置いていただければ、共有をはずします。
急ぎません。確認よろしくお願いいたします
Yoichi
(Yoichi)
13
こんにちは
取得しました。
以下2点修正してみてください。
既にテーブル定義があるようなので、Excel請求明細.Table("テーブル1")
とする
フィルター条件は、 CurrentRow(1).ToString
になると思います。
JayT
(JayT)
14
ありがとうございます。
フィルターで欲しい値が取得できました。
現在変数の値などUiPathがハンドリングしている内容を理解しようとしています。
このFor Each Row in DataTable アクティビティの CurrentRow が何を指しているか、またはどんなデータを保持しているのかがわかりませなん。
単純に英語読みすると、 CurrentRow → 現在の行 と思っていたのですが、BreakPointsを置いて、左の窓で値をみてみると、
上部のAにはCSVの全内容が表示されました
Data Table なのでテーブル全体という意味で理解できます
その下のBをみると画像のようになっていました
これはCSVにある
1, アルファベット株式会社, 東京都港区
を利用しようとしているのはわかります。
で、
DataColumnCollection(3)は、Excelのテーブル(3)=D列を指していると思います。
フィルタリングしようとしているのだと思いますが、フィルタのアクティビティは次のステップにあり、まだExcelのテーブルのD列をフィルタリング操作開始していないと考えました。
では、フィルタリングの前の CurrentRownの実体は何なのか
が気になっています。
あるいは
For Each Row in DataTable
のアクティビティの動作や変数を説明したオンラインのページはないでしょうか?自分では見つけられませんでした。
Yoichi
(Yoichi)
15
これはDataTableの各行を繰り返すアクティビティになります。
CurrentRowにはその時処理する行が入ります。
繰り返し1回目は(0ベースのインデックスなので)0行目の行が入ります。
2回目は1行目の行が入ります。
3回目は2行目の行が入ります。
あるいは
For Each Row in DataTable
のアクティビティの動作や変数を説明したオンラインのページはないでしょうか?自分では見つけられませんでした。
以前も申し上げましたが、UiPath Academy( 無償e-learning)の初級コースから地道にやったほうが良いと思います。それなりに時間がかかりますが、必要なことは網羅されていると思います。
JayT
(JayT)
16
ありがとうございます
なかなかUiPathのために時間とれないですが、地道に受講してみます。
system
(system)
Closed
17
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.