Первый раз постер тут :). У меня возникла следующая проблема при автоматизации Excel 2010 из приложения WinForms C #. Моя тестовая таблица выглядит следующим образом:
Index Value1 Value2
AAA 2 3
AAA 3 4
AAA 3 8
BBB 2 2
BBB 5 6
BBB 3 5
CCC 1 2
CCC 2 2
DDD 2 5
Я успешно открыл книгу и загрузил лист из своего приложения на C #. После этого я запускаю следующий код:
Excel.Range range = xlSheet.UsedRange;
range.AutoFilter(1, "AAA", Excel.XlAutoFilterOperator.xlAnd, Type.Missing, true);
Excel.Range filteredRange = range.SpecialCells(Excel.XlCellType.xlCellTypeVisible);
Это работает, как и ожидалось, и filterRange теперь содержит первые четыре строки моей тестовой таблицы (имена столбцов и все строки "AAA"). Однако, если я пытаюсь использовать Автофильтр, чтобы получить все строки "BBB", как это
range.AutoFilter(1, "BBB", Excel.XlAutoFilterOperator.xlAnd, Type.Missing, true);
Excel.Range filteredRange = range.SpecialCells(Excel.XlCellType.xlCellTypeVisible);
Я получаю только первую строку таблицы (имена столбцов) в диапазоне отфильтрованного диапазона. Если я действительно открою таблицу в Excel, то увижу, что она правильно отфильтрована (строки «BBB») отфильтрованы, но каким-то образом метод Range.SpecialCells () не работает должным образом и возвращает только первую строку.
Я перепробовал все, что мог придумать, но, поскольку я новичок в автоматизации Excel, возможно, я что-то упустил, поэтому я подумал, что вы, ребята, могли бы помочь. Единственное, что мне приходит в голову, это то, что в первом случае («AAA») все видимые строки являются последовательными - имена столбцов находятся в строке 1, а строки «AAA» - 2, 3 и 4 соответственно. Во втором случае имена находятся в строке 1, но строки «BBB» имеют индексы 5, 6 и 7, то есть в таблице есть «дыра». Может ли это повлиять на метод SpecialCells ()?
Заранее благодарим за любой вклад, который вы можете иметь!