Как получить диапазон отфильтрованных строк с помощью Excel Interop? - PullRequest
7 голосов
/ 16 декабря 2009

Я использую сборки Excel Interop для своего проекта, если я хочу использовать автофильтр, то можно использовать

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

а как мне получить отфильтрованные строки ??

может у кого-нибудь есть идея ??

Ответы [ 2 ]

14 голосов
/ 17 декабря 2009

После того, как вы отфильтровали диапазон, вы можете получить доступ к ячейкам, которые соответствуют критериям фильтра, используя метод Range.SpecialCells , передав значение Excel.XlCellType.xlCellTypeVisible, чтобы получить видимые клетки.

На основании приведенного выше примера кода доступ к видимым ячейкам должен выглядеть примерно так:

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

Оттуда вы можете получить доступ к каждой ячейке в видимом диапазоне через коллекцию 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.
    }
}

Надеюсь, это поможет!

Mike

1 голос
/ 21 ноября 2018

Я использовал, как упоминалось ниже, похоже на то, что сказал Майк,

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]
 }
}
...