错误:无法获取Range类的AutoFilter属性

在下面的代码中,我只收到第二次调用AutoFilter()时收到上述错误。

string FilterValue1 = tbSysCat1.Text.FilterDoesNotContain(); string FilterValue2 = tbSysCat2.Text.FilterDoesNotContain(); string FilterValue3 = tbSysCat3.Text.FilterDoesNotContain(); string[] SysCat = new string[6]; // EDIT: originally tried object[]; still got error SysCat[0] = FilterValue1; SysCat[1] = FilterValue1.ToUpper(); SysCat[2] = FilterValue2; SysCat[3] = FilterValue2.ToUpper(); SysCat[4] = FilterValue3; SysCat[5] = FilterValue3.ToUpper(); VApplication.ActiveSheet.Range[VWorkingRange].AutoFilter(9, Missing.Value, Missing.Value, Missing.Value, true); VApplication.ActiveSheet.Range[VWorkingRange].AutoFilter(9, SysCat, MSExcel.XlAutoFilterOperator.xlFilterValues, Missing.Value, true); 

注意:FilterDoesNotContain()是一种扩展方法,用于为“不包含”添加特定于Excel的通配符。

从我的其他研究,错误表明AutoFilter不能在运行时与Range对象关联(因为它是一个dynamictypes)。 但是,在第一个电话中,这个联系恰好相关。 这是令人困惑的部分。

第一个调用是清除第9列的filter。

环境:使用.NET 4.0的VS2010中的VSTO (编辑:MS Excel 2007 Pro)

感谢你的帮助!

对不起,我没有Excel来试试这个。
但是,更改下面的行

VApplication.ActiveSheet.Range[VWorkingRange].AutoFilter(9, Missing.Value, Missing.Value, Missing.Value, true);

VApplication.ActiveSheet.Range[VWorkingRange].AutoFilter(Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

要么

VApplication.ActiveSheet.Range[VWorkingRange].AutoFilter();

这是清除AutoFilter
即当你点击自动过滤button时,所有的列都得到filter,而不是一个特定的filter。
因此,您将不得不清除自动filter(通过不告诉列)。

编辑:以防万一它有帮助,生成你想要在VBA中做的macros。 如果有效,请将其转换为c#。

编辑:要添加多个条件,您可以获取对ActiveSheet.AutoFilter属性(一旦自动筛选器生效)的引用。 对于这个属性,你可以进一步的标准。

看看这个页面 ,特别是你可以使用Filters.Add添加标准Filters集合

在发表我的问题时,我可能遗漏了一些对查明错误原因至关重要的信息。 我没有提到我的数据正在testing“不包含”标准。

经过更多的研究和绊倒这个链接后 ,我了解到运算符xlFilterValues不适用于筛选条件“不包含”。

它只适用于细胞值的精确匹配。 也许这对你们中的一些人来说是显而易见的,这对我来说不是这样。 我期望可以将filter值传递到包含Excel特殊字符的数组中,以指示“不包含”(例如,“<> * data *”)

如果上面不清楚,错误是由我使用xlFilterValues运算符在数组中传递“<> * data *”导致的。

解决scheme:我创build了一个单独的函数来手动收集所有不包含我的标准字段的列数据。 该函数返回一个包含我想保留的数据的数组。 然后,我正常使用xlFilterValues运算符将这个数组传递给AutoFilter(),一切正常。 这感觉很不好,但经过一天的研究这个问题,我很好,这个解决scheme。

谢谢shahkalpesh你的时间和精力来帮助我。 希望这个答案也能帮助你。