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

时间:2009-12-16 18:01:52

标签: c# excel automation vsto

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

sheet.UsedRange.AutoFilter(1,SheetNames[1],Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlAnd,oMissing,false)

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

任何人都可以有想法吗?

2 个答案:

答案 0 :(得分:14)

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

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

Excel.Range visibleCells = sheet.UsedRange.SpecialCells(
                               Excel.XlCellType.xlCellTypeVisible, 
                               Type.Missing)

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

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

希望这有帮助!

麦克

答案 1 :(得分:1)

我按照如下所述使用,类似于Mike所说的

foreach (Excel.Range area in visibleCells.Areas)
{
 foreach(Excel.Range row in area.Rows)
 {
 int index = row.Row; // now index is the present Row index within the range
 string test = Mysheet.Cells[index,4].Values //// Mysheet is my present working sheet. After this test will contain the values pointing to the values.cells[index,4]
 }
}