powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Список именованных диапазонов
9 сообщений из 9, страница 1 из 1
Список именованных диапазонов
    #37083258
web_pointer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Excel 2007 при нажатии Ctrl+F3 выводится диспетчер имен. Там показываются все имена которые есть в Книге.
Как можно из приложения (C#, ASP.NET) программно получить список всех именованных диапазонов в Excel 2007?
...
Рейтинг: 0 / 0
Список именованных диапазонов
    #37083348
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_pointer,

Application.Names.
...
Рейтинг: 0 / 0
Список именованных диапазонов
    #37083390
web_pointer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,
ДА. Вроде получается так. Но Application.Names возврщает коллекцию всех имен диапазонов.
Когда пробую выводить на экран, то, если у меня экселевской книге 6 имен, то мне выводится 6 раз System.__ComObject.
А как можно из него получить конкретно имя диапазона????
...
Рейтинг: 0 / 0
Список именованных диапазонов
    #37083395
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_pointer,

скастуйте его к Name, посмотрите его свойства.
...
Рейтинг: 0 / 0
Список именованных диапазонов
    #37086222
web_pointer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,

мне удалось достать список всех имен после того как я покопался в свойствах.
получилось так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
            /*cодаем объект Excel приложения*/
            Excel.Application exApp = new Excel.Application();
            //создаем объект рабочей книги и открываем его связыва с физическим файлом
            //-- хоть параметров у метода open очень много но кроме первого все остальные мы не указываем
            //-- а потому вместо параметра пишем Type.Missing
            Excel.Workbook wb = exApp.Workbooks.Open(@"C:\ExcelFile.xls",
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing);
            //в цикле выводим все имена диапазонов
            for (int i = 1; i <= exApp.Names.Count; i++)
            {
                Response.Write("Name -> " + wb.Names.Item(i, Type.Missing, Type.Missing).Name + "<br/>");
            }
Но потом еще полазив на форумах нашел более изящный способ используя Oledb:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
            ......
            oConnection.open();           
            //============================================================
            /*
             * ПОЛУЧАЕМ СПИСОК ВСЕХ ИМЕН В ЗАГРУЖАЕМОМ ЭКСЦЕЛЕВСКОМ ФАЙЛЕ*
             */

            string currentTable;
            //сохраняем коллекцию имен в таблице данных
            DataTable excelTables = oConnection.GetSchema("Tables");
            //в цикле ведем пересчет по элементам коллекции и сохраняем имена в строковой переменной
            foreach (DataRow excelTable in excelTables.Rows)
            {
                currentTable = excelTable["TABLE_NAME"].ToString();
            }
            oConnection.Close(); 
oConnection соответственно само Oledb соединение.

Спасибо что направили мой вектор мысли в нужно русло.
...
Рейтинг: 0 / 0
Список именованных диапазонов
    #37087002
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_pointer,

да, первый способ мне ближе. Только я бы цикл попробовал сделать foreach.
Второй способ - не очевиден и будет сложно его поддерживать.
Изящество... зачем оно вам ?
...
Рейтинг: 0 / 0
Список именованных диапазонов
    #37087439
web_pointer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,

Наверно не столько изящество, сколько желание не смешивать два разных подхода в одном приложении.
Просто подключения к файлу и чтение информации оттуда у меня описаны с использованием OLEdb, а если получение файла писать с использованием Excel.Application то получится смешивание.
Конечно я могу всю работу по чтению информации делать по Excel.Application, но в литературе пишется, что OLEdb быстрее работает.

А почему вы сказали что второй способ сложнее поддерживать???
...
Рейтинг: 0 / 0
Список именованных диапазонов
    #37087475
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_pointer,

Ну смотрите, пройдет какое-то время, и вы увидете два фрагмента кода

Код: plaintext
1.
Excel.Workbook wb = exApp.Workbooks.Open
for (int i =  1 ; i <= exApp.Names.Count; i++)
или

Код: plaintext
1.
2.
oConnection.open();   
DataTable excelTables = oConnection.GetSchema("Tables");
foreach (DataRow excelTable in excelTables.Rows)

Мне первый вариант кажется более понятным, к тому же
1. Непонятно, что за oConnection , где и как он инициализируется
2. В первом случае вы получаете объет Name, во-втором - DataRow.
3. Зачем вам скорость ?

Если уж говорить о скорости и прочих удобствах, то я бы открыл Excel, как XML.
если у вас конечно 2007.
Вот тут будет и скорость, и не будет нужды создавать экземпляр Excel.
...
Рейтинг: 0 / 0
Список именованных диапазонов
    #37089683
web_pointer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,

Кстати. с XML-ом пробовал. Тоже хороший способ.
Спасибо за помощь. Буду работать.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Список именованных диапазонов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]