如何复制AutoFilter()方法筛选的行

时间:2010-10-23 20:19:48

标签: c# .net excel-2003

到目前为止,我一直使用AutoFilter()方法没问题。但我无法标记或获取已过滤行的范围,无法计算/复制/删除它们。

我在VBA上看过很多关于这个问题的帖子,但是C#没有。

过滤后,我试图通过以下任何一行获得范围:

range = ws.UsedRange.CurrentRegion.SpecialCells(Excel.XlCellType.xlCellTypeVisible, missing);
range = ws.AutoFilter.Range.SpecialCells(Excel.XlCellType.xlCellTypeVisible, missing);
range = ws.Cells.SpecialCells(Excel.XlCellType.xlCellTypeVisible, missing);

我甚至尝试了其他我甚至不记得的方式。

在标记范围后,我尝试通过执行以下操作来计算行数:

range.Rows.Count

并且在每种情况下,我得到了工作表的总行数,有时我得到65536(office 2003),有时只有1,但肯定不是我过滤的行数。

我必须将它与Office 2003一起用于对象库11。

3 个答案:

答案 0 :(得分:2)

确定。经过长时间的睡眠。我有一些力量来尝试更多方向,这次没有得到其他论坛和谷歌的指示。

试试这个:

  • 将autoFilter应用于整个工作表的使用范围
  

Excel.Range range = workSheet.UsedRange;

  • 在范围
  • 上应用autoFilter
 range.AutoFilter(1, criteriaString , Excel.XlAutoFilterOperator.xlAnd, missing, true);

(这将根据第1列过滤行,并以criteriaString作为标准)

  • 现在您想获得过滤范围:
Excel.Range filteredRange = range.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeVisible, missing);
  • 现在,您可以访问filteredRange.Rows.Count整数来计算行数,并做有趣的事情。

这就是它!它必须很简单然后我才想到它。

由于

答案 1 :(得分:1)

为了删除行,它只是     range.Delete(Microsoft.Office.Interop.Excel.XlDeleteShiftDirection.xlShiftUp);

答案 2 :(得分:0)

在autofilter之后,我想在过滤的行中只在范围“N”中命名一个术语“COGI”。如果要写入只读取范围“N”并插入术语“COGI”