这里的第一次海报:).我从WinForms C#应用程序自动化Excel 2010时遇到以下问题.我的测试表看起来如下:
Index Value1 Value2
AAA 2 3
AAA 3 4
AAA 3 8
BBB 2 2
BBB 5 6
BBB 3 5
CCC 1 2
CCC 2 2
DDD 2 5
Run Code Online (Sandbox Code Playgroud)
我成功打开工作簿并从我的C#应用程序加载工作表.之后我运行以下代码:
Excel.Range range = xlSheet.UsedRange;
range.AutoFilter(1, "AAA", Excel.XlAutoFilterOperator.xlAnd, Type.Missing, true);
Excel.Range filteredRange = range.SpecialCells(Excel.XlCellType.xlCellTypeVisible);
Run Code Online (Sandbox Code Playgroud)
这按预期工作,filterRange现在包含我的测试表的前四行(列名和所有"AAA"行).但是,如果我尝试使用AutoFilter来获取所有"BBB"行,就像这样
range.AutoFilter(1, "BBB", Excel.XlAutoFilterOperator.xlAnd, Type.Missing, true);
Excel.Range filteredRange = range.SpecialCells(Excel.XlCellType.xlCellTypeVisible);
Run Code Online (Sandbox Code Playgroud)
我最终只得到filteredRange范围中表的第一行(列名).如果我实际打开Excel中的表,我可以看到它被正确过滤("BBB"行)被过滤,但不知何故,Range.SpecialCells()方法没有按预期运行,只返回第一行.我已经尝试了所有我能想到的东西,但由于我是Excel自动化的新手,也许我错过了一些东西,所以我认为你们可能会提供帮助.我唯一想到的是,在第一种情况下("AAA"),所有可见行都是连续的 - 列名在第1行,"AAA"行分别是2,3和4.在第二种情况下,名称在第1行,但"BBB"行的索引为5,6和7,即表中有一个"洞".这可能会影响SpecialCells()方法吗?
提前感谢您提供的任何输入!