如何使用Excel Interop获取已过滤行的范围?

sha*_*pan 7 c# excel automation vsto

我正在为我的项目使用Excel Interop程序集,如果我想使用自动过滤器那么可能使用

sheet.UsedRange.AutoFilter(1,SheetNames[1],Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlAnd,oMissing,false)
Run Code Online (Sandbox Code Playgroud)

但是如何获得过滤后的行?

谁能有想法?

Mik*_*lum 14

过滤范围后,您可以通过使用Range.SpecialCells方法访问传递过滤条件的单元格,传入值为"Excel.XlCellType.xlCellTypeVisible"以获取可见单元格.

根据上面的示例代码,访问可见单元格应如下所示:

Excel.Range visibleCells = sheet.UsedRange.SpecialCells(
                               Excel.XlCellType.xlCellTypeVisible, 
                               Type.Missing)
Run Code Online (Sandbox Code Playgroud)

从那里你可以通过'Range.Cells'集合访问可见范围内的每个单元格,或访问每一行,首先通过'Range.Areas'集合访问区域,然后迭代'Rows'中的每一行每个区域的集合.例如:

foreach (Excel.Range area in visibleCells.Areas)
{
    foreach (Excel.Range row in area.Rows)
    {
        // Process each un-filtered, visible row here.
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

麦克风

  • downvoter可以自己解释一下吗?这是一个干净的解决方案,它确实适用于原始海报.有什么东西在这里不适合你吗? (3认同)
  • 同意,在对任何答案给予否定投票时应该发表评论, - 所以至少任何用户都可以更新它或提供更好的解决方案:) (3认同)