我正在使用Office& A处理Excel VSTO项目。 VS 2010.我有代码来获得范围,但我似乎无法让Autofilter正常工作。继承了我到目前为止的代码:
Excel.Workbook wb = (Excel.Workbook)Globals.ThisWorkbook.InnerObject;
Excel.Name rngN = wb.Names.Item("MyNamedRange", System.Type.Missing, System.Type.Missing);
Excel.Range rng = rngN.RefersToRange;
int allRows = rng.Rows.Count;
rng.AutoFilter(8, "ST", Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlOr, System.Type.Missing, null);
int filteredRows = rng.Rows.Count;
但是,在此示例中,行数相同且我的范围根本没有过滤 - 我指的是上面的变量 allRows 和 filteredRows 。所以我要么没有正确实现过滤器,要么我的过滤器语句错误。我的过滤行:
rng.AutoFilter(8, "ST", Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlOr, System.Type.Missing, null);
所以我的理解是,这一行将寻找" ST"在第8场。这不正确吗?为什么我的记录计算相同?
答案 0 :(得分:1)
在回答问题的第二部分时,获取过滤行的数量非常棘手。 rng.Rows.Count
将返回原始行数,而不是过滤后的数字。
您可以使用如下表达式:
Evaluate("=SUBTOTAL(3," & Range("A:A").Address & ")-1")
你可以存储一个整数 - 你可能需要转换结果。
3表示COUNTA函数(不包括已过滤的行),我减去1以排除标题行。如果列中有其他被占用的单元格,请增加此数字。
您可以暂时将此公式存储在单元格中,但我相信它应该使用Evaluate()
返回结果。
已添加阅读
rng.SpecialCells(xlCellTypeVisible).Count
应用过滤器之前和之后确定过滤器是否有效。
有关此Excel MSDN link的Excel过滤的有用信息。