0

我正在使用 Office 和 VS 2010 处理 Excel VSTO 项目。我有获取范围的代码,但我似乎无法让自动筛选器正常工作。这是我到目前为止的代码:

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;

然而,在这个例子中,行数是相同的,我的范围根本没有被过滤——我指的是上面的变量allRowsfilteredRows。所以我要么没有正确实现过滤器,要么我的过滤器语句是错误的。我的过滤线:

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

所以我的理解是,这条线将在第 8 个字段中查找“ST”的所有匹配项。这不正确吗?为什么我的记录计数相同?

4

1 回答 1

1

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

您可以使用如下表达式:

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

您可以将其存储在整数中 - 您可能必须转换结果。

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

您可以将此公式临时存储在单元格中,但我相信它应该使用Evaluate().

添加阅读

rng.SpecialCells(xlCellTypeVisible).Count

在应用过滤器之前和之后确定过滤器是否有效。

此MSDN 链接上提供了有关 Excel 过滤的有用信息。

于 2013-06-26T17:25:11.147 回答