Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Excel VSTO自动筛选无法正常工作?_C#_Excel_Vsto - Fatal编程技术网

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

C# Excel VSTO自动筛选无法正常工作?,c#,excel,vsto,C#,Excel,Vsto,我正在与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 rn

我正在与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”的所有匹配项。这不对吗?为什么我的记录计数相同?

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

可以使用如下表达式:

Evaluate("=SUBTOTAL(3," & Range("A:A").Address & ")-1")
您可以将其存储为整数-您可能必须强制转换结果

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

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

添加读取

rng.SpecialCells(xlCellTypeVisible).Count
在应用过滤器之前和之后,确定过滤器是否工作


这里有关于Excel筛选的有用信息。

我将尝试使用
System.Type.Missing
删除xlOr参数,因为它是可选参数。还请注意,列是从Excel中的1索引的。谢谢。是的,我知道基于1的索引,我已经删除了这些参数,但没有效果。还有其他想法吗?这些单元格没有多余的空间,是不是“ST”?检查rng的父项是否为正确的工作表:
rng.parent.Name
请查看我对您的回答的评论,因此我的过滤器可能工作正常,但我对计数作为过滤器证明的依赖是错误的,对吗?那么,是否没有办法访问过滤范围?最终,我需要以编程方式在过滤范围内包含的值-我假设这是可能的,不是吗?是的,这是可能的。我想您可以保存并关闭该文件,然后打开它以查看过滤器是否到位。添加:您可以使用
rng.SpecialCells(xlCellTypeVisible)
访问过滤后的数据。是的,就是这样!谢谢你,这让我走得更远了。现在,还有一部分。我假设可以添加多个过滤器,比如rng.AutoFilter(8,“ST”)和紧接着rng.AutoFilter(8,“HT”),对吗?@JimBeam是的。在Excel中记录一个快速宏总是很有帮助的,如果您在筛选列表中选择多个项目,该宏将生成:
ActiveSheet.Range($a$5:$L$112”)。自动筛选字段:=7,标准1:=Array(uu“Accounts”,“Admin”,“It”),运算符:=xlFilterValues
@JimBeam我已经为我的答案添加了一个有用的链接。