【问题标题】:How to copy the rows filtered by the AutoFilter() method如何复制由 AutoFilter() 方法过滤的行
【发布时间】:2010-10-23 20:19:48
【问题描述】:

到目前为止,我一直在使用 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,但肯定不是我过滤的行数。

我必须将它与带有 Object Library 11 的 office 2003 一起使用。

【问题讨论】:

    标签: c# .net excel-2003


    【解决方案1】:

    好的。经过长时间的睡眠。我有能力尝试更多的方向,这次没有从其他论坛和谷歌获得方向。

    试试这个:

    • 对整个工作表的已用范围应用自动筛选

    Excel.Range 范围 = workSheet.UsedRange;

    • 对范围应用自动过滤器
     range.AutoFilter(1, criteriaString , Excel.XlAutoFilterOperator.xlAnd, missing, true);
    

    (这将根据以criteriaString为条件的第1列过滤行)

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

    就是这样!它必须很简单,然后我认为它会。

    谢谢

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 作者要求回答以复制行。
      【解决方案3】:

      在自动过滤之后,我想在过滤行的“N”范围内命名一个术语“COGI”。如何编写以获取该范围“N”并插入一个术语“COGI”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-17
        相关资源
        最近更新 更多