Excel VSTO Autofilter无法正常工作?

时间:2013-06-26 15:05:21

标签: c# excel vsto

我正在使用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场。这不正确吗?为什么我的记录计算相同?

1 个答案:

答案 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过滤的有用信息。