С# Excel interop получить имена всех ячеек на листе

Рейтинг: 2Ответов: 1Опубликовано: 22.04.2015

На листе есть несколько ячеек которым заданы имена. Т.е к примеру была ячейка А5, а стала "Результат_2". Нужно получить имена всех ячеек листа, которым присвоены имена.

на VBA это выглядит примерно так, но я не могу использовать VBA

Пытаюсь получить вот так

foreach(Excel.Worksheet wSheet in excelPattern.Worksheets)
{
    treeView1.Nodes.Add(wSheet.Name,wSheet.Name);

    foreach(Excel.Name n in wSheet.Names){  
        treeView1.Nodes[wSheet.Name].Nodes.Add( n.Name);
    }
}

В итоге вместо реальных имен из листа в дерево попадает что-то совсем не то

на листе РОД10

выр_проц;
выр_раб_усл;
выр_реал_соб;

но получаю

РОД10!_FilterDatabase;
РОД10!Z_7C371303_C1FE_49B4_A9DD_C1D8D4863FB7_.wvu.Rows;
РОД10!Print_Area;

Ответы

▲ 2Принят

Хм, странно вы приводите в пример код где идёт перебор Names для книги, а у себя почему-то используете Names листа. А это не одно и то же. Excel вам корректно возвращает имена листа, они все вида "ИМЯ_ЛИСТА!имя". Вам по всей видимости нужны "глобальные" (уровня книги):

// var workbook = ...;
foreach(var name in workbook.Names) {
    string n = name.Name;     //  имя 
    string r = name.RefersTo; //  на что ссылается имя (Лист1!$E$29)
    // ...
}

Вышеуказанный код вернет все имена книги, среди них будет и то что вам нужно. Чтобы связать имя ячейки с конкретным листом нужно использовать свойство RefersTo.