Как получить доступ к ячейке в Excel Interop при использовании отфильтрованных диапазонов? - PullRequest
0 голосов
/ 12 декабря 2011

У меня изначально был сегмент кода, который перебирал строки электронной таблицы Excel с использованием UsedRange как такового:

           range = ws.UsedRange;
           for (int row = 3; row <= range.Rows.Count; row++)
            {
                Object nObj = ((Excel.Range)ws.Cells[row, "N"]).Text;
            }

Но мне нужно было получить только те строки, которые остались после того, как я применил фильтр, чтобы (после просмотра Как получить диапазон отфильтрованных строк с помощью Excel Interop? ) я изменил код следующим образом:

    range = ws.UsedRange.SpecialCells(Excel.XlCellType.xlCellTypeVisible, Type.Missing);
    foreach (Excel.Range area in range.Areas)
    {
        foreach (Excel.Range row in area.Rows)
            //for (int row = 3; row <= range.Rows.Count; row++)
            {
                Object nObj = ((Excel.Range)ws.Cells[row, "N"]).Text;
            }
    }

За исключением случаев, когда я получаю ошибки несоответствия типов. Что фундаментального я здесь упускаю?

1 Ответ

0 голосов
/ 12 декабря 2011

Я полагаю, что при вызове ws.Cells[row, "N"] вы получаете несоответствие типов. В исходном коде row - это int. В измененном коде row является Excel.Range.

Учитывая, что в модифицированном коде row - это диапазон из одной строки (нескольких столбцов), все, что вам нужно сделать, это индексировать ячейку в этой строке, которая соответствует столбцу N. Предполагая, что ваш диапазон начинается в столбце А, это будет ячейка в 14-м столбце.

1011 * Е.Г. *

Object nObj = ((Excel.Range)row.Cells[1, 14]).Text;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...