在C#中计算过滤excel范围的行

我一直在AC#项目工作,我想要完成的是计数在C#过滤范围的可见行。

首先,我创build一个我要过滤的范围。

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

然后,我申请2个filter:

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

最后,我创build另一个范围,使用“XlCellType.xlCellTypeVisible”并尝试对行进行计数, 但计数返回1

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

如果我循环通过范围我可以得到计数。 但是,如果数据量很大,这会使stream程变慢。

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

我的问题是:有没有办法获得可见的过滤行数“直接”?

谢谢你们!

注意:如果我select范围,它将select计数中应显示的确切行数!

 argFiltered.Select(); 

不理想,但是这会好一些:

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

你能负担得起一个公式,在一些未使用的单元格计数的行? 如果对代码3使用小计函数,则不会计算filter隐藏的行数。 把一个公式放在一个单元格中并读取其值,例如

 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();