ヘッダーを残すには

こんにちは。
Filter DataTable操作でヘッダーを残す方法は何かないでしょうか?
例)下記添付画像のような形のデータで、年齢が「20」の行を全て削除する動作を行った場合、データ部分だけでなく、ヘッダー部分(A1~C1)も消えてしまいます。
何か方法等ございませんでしょうか?

@K1111111,

You can use the Delete range activity like this by marking Has Header

こんにちは

現在どのようなアクティビティを使っていますでしょうか?
DataTable自体のヘッダがどのようになっているかによりますが、ただしくヘッダとして認識されているのであれば
DataTableを書き込むときに、ヘッダを追加のチェックボックスを有効にしてみてください。

ヘッダ部分がデータとして取り込まれていて、それを解消できない場合は、式で少々工夫が必要になります。

Hi @K1111111

フィルターデータテーブルアクティビティは、ヘッダーをデフォルトで保持します。フィルター後のデータをExcelに書き戻す際は、Write Rangeアクティビティの「ヘッダーを追加」オプションを必ずチェックし、データを書き込む開始セルを「A1」など正しい範囲に指定して、ヘッダー行を保持してください。

ありがとうございます。
ヘッダーを追加のチェックボックスは有効になっていました。
よろしければ式での制御方法をご教示いただけますでしょうか?

使用しているアクティビティは「Write Range」です。

となりますと、ヘッダ部分に本来必要なデータが格納されてしまっている可能性がでてきますが、こちらいかがでしょうか?(そうなるとフィルターで除去されない可能性が出てきます)

元データはどのようになっていて、どのアクティビティで、どのように読み込んでいますでしょうか?

単にヘッダ部分の上書きを回避するためには、書き込み開始セルをA2にいただく方法もあります。(が上述の通り、ヘッダ部分にはフィルターが適用されませんので、期待する結果にならないように思えます)

元データは下記の通りです。

流れとしては。
①変数A=sample.item(“delete_age”).ToString.Split(","c)
②ReadRangeで元データの読み込み
③ForEachで変数A内の各要素を繰り返して、FilterDataTableでフィルター設定 「列」年齢= 「値」item(繰り返し)だったものを削除
④WriteRangeで別ファイルに書き込み
→この時セルをA2に指定してみましたが全て削除されました

この時点でヘッダ部分を正しく読み込めていますでしょうか?

まず一旦③をスキップして(無効化してみて)④で別ファイルに書き込んだ時に
元データがそのまま書き出されていますでしょうか?

これが正しく出力されていないようなら②のReadRangeの範囲指定が問題があるか、ヘッダ部分をヘッダとして読み込めていない可能性があります。アクティビティのプロパティ設定等の巣スクリーンショット共有可能でしょうか?

こんにちは。

ForEachはForEachRowアクティビティの記入ミスでしょうか?
ForEachアクティビティという別のアクティビティも存在するため、ここは注意して間違わないようにしてください。

ReadRangeアクティビティでExcelをDataTableに出力するときに、ヘッダを追加するをチェックし
WriteRangeアクティビティでDataTableをExcel出力するときに、ヘッダを追加するをチェックしてみてください。書き込みセル位置は”A1”です。Filter Datatableはヘッダに関係ないです。

ReadRangeアクティビティとWriteRangeアクティビティで必ず「ヘッダを追加するをチェック」するようにすれば、ヘッダが消えるトラブルは起きないはずです。

回答が役立ったらSolutionにチェックをお願いします。

③をスキップして実行しましたが、正しく出力されました。
ReadRangeのプロパティを共有いたします

ありがとうございます。
ヘッダは消えませんが削除対象が消えませんでした

となりますと、途中の処理が問題ですね。どこかでDataTableを新規に作成しているようなことはありませんか?あるいはFilterの仕方にも問題があるように思えますので、取り急ぎ以下試せますでしょうか?(③の部分を置き換えてください)

arrDr = InputTable.AsEnumerable().Where(Function(r) not 変数A.Any(Function(s) s=r("年齢").ToString)).ToArray()

filteredDataTable = arrDr.CopyToDataTable

filteredDataTable = InputTable.Clone()

注:arrDrはDataRow配列です。

>ヘッダは消えませんが
ヘッダが消えなくて良かったです。再度聞きますが、ForEachはForEachRowアクティビティの誤りでしょうか?

>削除対象が消えませんでした

「Filter Datatableアクティビティ」は使わないで、LINQでDataTableをDataRow配列に変換後、Where文で抽出するのが簡単です。(Yoichi様の回答を参考にしてください。)

ありがとうございます。
画像のようなエラーが出てしまいました。。



おそらくfilteredDataTableの型の指定が間違っていると思いますので、再指定できますでしょうか?(厳密には System.Data.DataTable の方ですが、他のDataTableを指定していると思います。)

ありがとうございます!解消されました。
一番初めの代入のエラーも型変換でしょうか?
「System.Data.DataRow」を指定しています

上記で示した式と違います。例えばWhereメソッドがありません。
今一度上記で示した式を確認いただき、必要に応じてそれぞれの変数を置き換えてください。

エラーは解消されました!
ありがとうございます。
実行できたのですが、削除対象が削除されません。
arrDrにデータが入ってきていません。