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指的是上面的变量allRowsfilteredRows

rng.AutoFilter(8, "ST", Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlOr, System.Type.Missing, null);

所以我的理解是,这条线将在第8场比赛中寻找"ST"的所有比赛。这不正确吗?为什么我的记录是一样的?

Excel VSTO自动筛选无法正常工作

在回答问题的第二部分时,获取过滤的行数很棘手。rng.Rows.Count将返回原始行数,而不是过滤后的行数。

您可以使用如下表达式:

Evaluate("=SUBTOTAL(3," & Range("A:A").Address & ")-1")

您可以将其存储在一个整数中——您可能需要强制转换结果。

3表示COUNTA函数(不包括过滤的行),我减去1来排除标题行。如果列中还有其他已占用的单元格,请增加此数字。

您可以将此公式临时存储在单元格中,但我认为它应该使用Evaluate()返回结果。

添加读取

rng.SpecialCells(xlCellTypeVisible).Count

在应用过滤器之前和之后,以确定过滤器是否工作。

此MSDN链接提供了有关Excel筛选的有用信息。