こんにちは。
Filter DataTable操作でヘッダーを残す方法は何かないでしょうか?
例)下記添付画像のような形のデータで、年齢が「20」の行を全て削除する動作を行った場合、データ部分だけでなく、ヘッダー部分(A1~C1)も消えてしまいます。
何か方法等ございませんでしょうか?
こんにちは
現在どのようなアクティビティを使っていますでしょうか?
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にチェックをお願いします。
ありがとうございます。
ヘッダは消えませんが削除対象が消えませんでした
となりますと、途中の処理が問題ですね。どこかで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を指定していると思います。)
上記で示した式と違います。例えばWhereメソッドがありません。
今一度上記で示した式を確認いただき、必要に応じてそれぞれの変数を置き換えてください。











