Как скопировать строки, отфильтрованные методом AutoFilter () - PullRequest
4 голосов
/ 24 октября 2010

До сих пор я использовал метод 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 (офис 2003), а иногда только 1, но точно не количество строк, которые я отфильтровал.

Я должен использовать его в Office 2003 с Object Library 11.

Ответы [ 3 ]

2 голосов
/ 24 октября 2010

Хорошо.после долгого сна.у меня есть возможность попробовать больше направлений, на этот раз без указания других форумов и Google.

Попробуйте это:

  • Примените автофильтр для используемого диапазона всего рабочего листа

Диапазон Excel.Range = workSheet.UsedRange;

  • Применить автофильтр к диапазону
 range.AutoFilter(1, criteriaString , Excel.XlAutoFilterOperator.xlAnd, missing, true);

(это отфильтрует строки в соответствии со столбцом 1 с критериями критериев строки)

  • Теперь вы хотите получить отфильтрованный диапазон:
Excel.Range filteredRange = range.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeVisible, missing);
  • Теперь вы можете получить filteredRange.Rows.Count целое число для подсчета строк и делать забавные вещи.

ЭТО ЭТО!это должно быть просто, тогда я когда-либо думал, что это будет.

Спасибо

1 голос
/ 23 сентября 2016

Для удаления строк это просто range.Delete(Microsoft.Office.Interop.Excel.XlDeleteShiftDirection.xlShiftUp);

0 голосов
/ 04 декабря 2013

после автофильтрации я хотел бы назвать термин «COGI» только в диапазоне «N» в отфильтрованных строках. Как написать, чтобы просто взять этот диапазон «N» и вставить термин «COGI»

...