Excel VSTO自动筛选无法正常工作
本文关键字:常工作 工作 VSTO 筛选 Excel | 更新日期: 2023-09-27 18:19:56
我正在用Office&与2010年相比。我有获取范围的代码,但似乎无法使自动筛选器正常工作。这是我目前掌握的代码:
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;
但是,在本例中,行计数是相同的,并且我的范围根本没有被过滤——Im指的是上面的变量allRows和filteredRows 所以我的理解是,这条线将在第8场比赛中寻找"ST"的所有比赛。这不正确吗?为什么我的记录是一样的?rng.AutoFilter(8, "ST", Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlOr, System.Type.Missing, null);
在回答问题的第二部分时,获取过滤的行数很棘手。rng.Rows.Count
将返回原始行数,而不是过滤后的行数。
您可以使用如下表达式:
Evaluate("=SUBTOTAL(3," & Range("A:A").Address & ")-1")
您可以将其存储在一个整数中——您可能需要强制转换结果。
3表示COUNTA函数(不包括过滤的行),我减去1来排除标题行。如果列中还有其他已占用的单元格,请增加此数字。
您可以将此公式临时存储在单元格中,但我认为它应该使用Evaluate()
返回结果。
添加读取
rng.SpecialCells(xlCellTypeVisible).Count
在应用过滤器之前和之后,以确定过滤器是否工作。
此MSDN链接提供了有关Excel筛选的有用信息。