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