2017-01-19 3 views
2

私はC#プロジェクトで作業していましたが、達成しようとしているのはC#でフィルタリングされた範囲の可視行を数えることです。フィルタ処理されたExcelの行数をC#で計算する

まず、フィルタリングする範囲を作成します。

Range usedRange = sheet.Range[sheet.Cells[7, 1], sheet.UsedRange.SpecialCells(XlCellType.xlCellTypeLastCell)]; 

その後、私は2つのフィルタ適用されます、

usedRange.AutoFilter(20, "<>RAW", XlAutoFilterOperator.xlFilterValues, "<>AV", true); 
    usedRange.AutoFilter(2, "ARG", XlAutoFilterOperator.xlFilterValues, Type.Missing, true); 

そして最後に、私は「XlCellType.xlCellTypeVisible」を使用して、別の範囲を作成し、行をカウントしてみてください、が、カウントは1を返します。

argFiltered = usedRange.SpecialCells(XlCellType.xlCellTypeVisible); 
    Console.WriteLine("Number of rows: "+ argFiltered.Rows.Count) // the count returns 1. 

範囲をループするとカウントを取得できます。

//this is not effective 
foreach (Range area in argFiltered.Areas) { 
    foreach (Range areaRow in area) { 
     count++; 
    } 
    } 

私の質問です:「直接」目に見えるフィルター行の数を取得する方法はありますが、データの大きな量で、このプロセスに多くを遅らせることができますか?

ありがとうございました!

注: 範囲を選択すると、カウントに表示される正確な行数が選択されます。

argFiltered.Select(); 

答えて

0

の理想が、これはやや良くなるわけではありません。

foreach (Range area in argFiltered.Areas) { 
    count += area.Rows.Count; 
} 
0

あなたが行をカウントし、いくつかの未使用のセルに数式を入れて余裕ができますか?コード0でSubtotal関数を使用すると、フィルタによって隠された行はカウントされません。セルに数式を入れ、その値を読み取ります。

sheet.Cells[1, 255].Formula = "=subtotal(3, A1:A16383)"; //Count all rows that have a non-blank column A and aren't hidden 
var count = sheet.Cells[1, 255].Value; 
sheet.Cells[1, 255].ClearContents(); 
関連する問題