Как получить значения выпадающего списка в excel?
Пытаюсь получить значения из выпадающего списка в excel, делаю все исходя из документации, вот пример кода
from openpyxl import load_workbook
wb = load_workbook('test.xlsx')
ws = wb['TestSheet']
cell = ws['H4'] # моя ячейка с выпадающим списком
data_validation = ws.data_validations.dataValidation
for i in data_validation:
if cell.coordinate in i.sqref:
print(i)
На вывод получаю объект
sqref=<MultiCellRange [H4:H500002]>, showDropDown=False, showInputMessage=False, showErrorMessage=True, allowBlank=False, errorTitle='Ошибка', error='Выберите значение из списка', promptTitle=None, prompt=None, type='list', errorStyle=None, imeMode=None, operator=None, formula1='name17', formula2=None
Исходя из документации в атрибуте formula1 должна содержаться формула этого самого списка, хотя у меня там содержится некое name17
.
Ответы (1 шт):
Автор решения: Clark Devlin
→ Ссылка
Разобрался.
name17
это именованный диапазон, где и содержится нужная мне информация.
Чтобы получить необходимые мне данные использовал следующий код:
from openpyxl import load_workbook
# Загружаем рабочую книгу и лист
wb = load_workbook('test.xlsx')
ws = wb['Шаблон']
cell = ws['H4']
# Получаем данные валидации
data_validation = ws.data_validations.dataValidation
# Ищем нужную валидацию
for i in data_validation:
if cell.coordinate in i.sqref:
print(f"Ссылка ячейки: {i.sqref}")
named_range = i.formula1.replace("=", "") # Убираем знак равенства
print(f"Именованный диапазон: {named_range}")
if named_range in wb.defined_names:
defined_name = wb.defined_names[named_range]
for destination in defined_name.destinations: # destination - это кортеж (sheet, range)
sheet = wb[destination[0]]
for row in sheet[destination[1]]:
for cell in row:
print(cell.value)