データテーブルの途中からの処理について

お世話になります。

現在、下記のように1行ずつファイルパスを読み込んで処理が終わったら〇を残していくものを作成しております。

1日150件ずつ処理をするため、次の日は途中の行から読み込み処理を進めていく形にしていきたいと思っております。
仕様としては、〇の記してある最終行を取得して範囲を読み込みアクティビティを使用して下記のように設定しております。

保存先をデータテーブルの各行として読み込んでおります。

こちらの仕様がなかなかうまくいかないのですが、ご教授頂けますでしょうか。
よろしくお願いいたします。

こんにちは

どのようにうまく動作していないでしょうか?

いくつかのアプローチが考えられますが、範囲読み込みを部分的に行うよりは
表全体を読み込んでそこから必要箇所を抽出した方が、良いようにも思えます。

ご回答ありがとうございます。

下記のようなメッセージが出ます。
コメント 2023-01-13 152109

データテーブルに全範囲読み込んだ後にK列の〇以外を抽出するということですね。
前判定の繰り返しなども使えるのかなと思ったのですが、繰り返し(データテーブルの各行)内でさらに別の繰り返しが使用できなくて諦めておりました、、

何か方法はありますでしょうか?
よろしくお願いいたします。

こんにちは
とりあえずエラーに対しては以下で修正できると思います。

Excel.Sheet("Sheet1").Range("A"+(最終行+1).ToString+":K"+(最終行+151).ToString)

ありがとうございます。

こちら修正してみたのですが、データテーブルの各行を繰り返し内でパスを1行ずつ読み込むところでエラーとなってしまいます。

Excelファイルを使用のところでCurrentRow(“パス”).ToStringとしています。

"パス"はヘッダー名でヘッダーの表記をなくすと下記のようにxamlが保存されている直下のファイルを開こうとしてしまいます。
コメント 2023-01-13 155925

原因はわかりますでしょうか。
何卒よろしくお願いいたします。

エラーの内容は何でしょうか?

"パス"はヘッダー名でヘッダーの表記をなくすと下記のようにxamlが保存されている直下のファイルを開こうとしてしまいます。

こちらは処理として誤っています。列名指定が必須になります。

エラーの内容をお伝えそびれて失礼いたしました。

エラーの内容は下記となっております。
コメント 2023-01-13 161056

A152が最終行ですので、A153-K303を範囲としているのには間違いありません。

また、"パス"はA列のヘッダーなのでA153-A303を読み込んでも下記のように同じようなエラーとなってしまいます。
コメント 2023-01-13 160749

こんにちは

範囲読み込みの始点が表の途中からなので、表上端のヘッダー情報は読み込まれていないことが原因です。
列番号で指定するか、冒頭のPOSTで申し上げた

表全体を読み込んでそこから必要箇所を抽出した方が、良いようにも思えます。

にすると、列名指定が可能です。(この場合ロジックの見直しが必要です)

ありがとうございます。

必要個所を抽出して列名を指定するとなると、データテーブルの各行の繰り返しだと列名を指定できないと認識しているため、それ自体を変更する必要があると思うのですが、友好的な繰り返しアクティビティはありますでしょうか?

こんにちは

表全体を読み込みます(dtとします)。

dtをフィルターします。済欄にかならず〇が入っているならデータテーブルをフィルターアクティビティで〇印を削除すれば良いかと思います。
もし次に記入すべき行番号がわかっているなら

dt = dt.AsEnumerable.Skip(200).CopyToDataTable

のようにすれば最初の200件をスキップしたDataTableに変換できます。

150件分を処理したいのであれば

dt = dt.AsEnumerable.Take(150).CopyToDataTable

とすれば上位150件分だけのDataTableになります。

抽出・処理したDataTableを指定セルを起点に書き戻すか、
各行単位で処理完了時に済列を更新すれば良いかと思います。

なおシステムへの書き込み等を伴うようなケースは、リカバリを考えると後者が好ましいです。

ありがとうございます。

下記のようにフローを構成してみましたが、フィルターするのに時間がかかってしまっているのか、エラーも出ずになかなか処理が進まなくなってしまいました。

代入ではご教示頂いた通り、150件のみのデータテーブルをファイルパスに代入しております。

こちらは単にフィルターして、データテーブルを作成しているのに時間がかかってしまっているだけなのでしょうか?

こんにちは
リボンメニューのアクティビティをログを有効にして、どこで時間がかかっているか確認できますでしょうか?
もし、範囲読み込みで時間がかかっているようでしたら、クラシックの範囲読み込みを利用できますでしょうか?(アクティビティパネルのフィルター設定のクラシックを表示をONにする必要があるかもしれません)

ありがとうございます。

範囲の読み込みに時間がかかっていたので範囲の読み込みをクラシックに変更したら無事〇のついていない行が読み込まれるようになりました。
ありがとうございます。

最後にお聞きしたいのですが、1行ずつ処理が終わったら最後に〇か×のログを残すようにしております。
繰り返しの出力の現在のインデックスにidxを代入し、下記のようにログを残せるようにしています。

ただこちらだとフィルターがされていなくて1行目から〇や×のログを残しているようです。

何かよい方法はありますでしょうか?

フィルターする前のDataTableの〇の行番号を抽出しておいて、それをオフセットすれば良いかと思います。〇がある行だけを抽出して、その行数でも代替できるかもしれません。

ありがとうございます。

ご教授頂いた通り、最終行をフィルター前に取得して対処することができました。
長いお時間ご教授頂きありがとうございました。

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