Сообщить об ошибке.

Определенные имена для доступа к диапазонам ячеек

Модуль openpyxl поддерживает определенные имена для более простого доступа к ячейке, диапазону ячеек или формулы.

Спецификация Excel говорит следующее об "определенных именах":

Определенные имена - это описательный текст, который используется для представления ячейки, диапазона ячеек, формулы или постоянного значения.

Это означает, что они очень слабо определены. Они могут содержать константу, формулу, ссылку на одну ячейку, ссылку на диапазон ячеек или несколько диапазонов ячеек на разных листах. Они определяются глобально для книги и доступны из атрибута Workbook.defined_names, который представляет собой словарный объект.

Создание именованных диапазонов.

from openpyxl import Workbook
from openpyxl.workbook.defined_name import DefinedName

wb = Workbook()
new_range = DefinedName('newrange', attr_text='Sheet!$A$1:$A$5')
wb.defined_names.append(new_range)

# локальный именованный диапазон 
# (действителен только для определенного листа)
sheetid = wb.sheetnames.index('Sheet')
private_range = DefinedName('privaterange', attr_text='Sheet!$A$6', localSheetId=sheetid)
wb.defined_names.append(private_range)
# этот локальный диапазон не может быть извлечен 
# из глобальных определенных имен
assert('privaterange' not in wb.defined_names)

# для получения локальных диапазонов 
# должна быть предоставлена область:
print(wb.defined_names.localnames(sheetid))
print(wb.defined_names.get('privaterange', sheetid).attr_text)

# код выведет
# ['privaterange']
# Sheet!$A$6

Пример доступа к диапазону ячеек.

Доступ к диапазону под названием my_range:

# получаем диапазон ячеек из словаря `defined_names`
my_range = wb.defined_names['my_range']
# если `my_range` содержит диапазон ячеек, то атрибут назначения не равен None

# следующее выражение возвращает генератор 
# кортежей (название листа, диапазон ячеек)
dests = my_range.destinations

cells = []
for title, coord in dests:
    ws = wb[title]
    cells.append(ws[coord])