Используя python и openpyxl Я пытаюсь создать зависимый список данных с DataValidation , как в примере из этой статьи .
DataValidation отлично работает, когда я указываю прямо на некоторый диапазон ячеек. Но когда я создаю каскад, то полученный файл Excel поврежден и может быть открыт только в режиме восстановления.
Сейчас я могу только предположить, что это может быть связано с ошибкой, когда первый столбец пуст, а затем сохранен каскадно DataValidation Excel показывает всплывающее окно с ошибкой
Источник в настоящее время оценивается как ошибка. Вы хотите продолжить?
Тем не менее, мы можем сохранить такое потенциально ошибочное подтверждение данных при выполнении его вручную в Excel. Это просто оставляет нам пустой список данных.
Так что мой вопрос: openpyxl не поддерживает такие ошибки? Или есть какой-то аргумент DataValidation
, который я пропустил, чтобы молча пропустить такие ошибки? Любая другая идея создать DataValidation, которая оценивается как ошибка с python?
Пример кода для воспроизведения ошибки:
from openpyxl import Workbook
from openpyxl.worksheet.datavalidation import DataValidation
wb = Workbook()
sheet1 = wb.active
data_sheet = wb.create_sheet("DATA")
data_sheet['A1'] = "data1"
data_sheet['A2'] = "value1"
data_sheet['A3'] = "value2"
data_sheet['B1'] = "data2"
data_sheet['B2'] = "other value1"
data_sheet['B3'] = "other value2"
data_sheet['B4'] = "other value3"
formula = "DATA!1:1"
data_validation = DataValidation(type='list', formula1=formula, allow_blank=True)
sheet1.add_data_validation(data_validation)
data_validation.add("A1")
# when I comment this section out
# and create data validation with following formula by hand
# it can be saved in excel and it works
# but as I mentioned, error popup appears in excel
formula2 = "OFFSET(DATA!A2;0;MATCH(A1;DATA!1:1;0)-1;COUNTA(OFFSET(DATA!A:A;0;MATCH(A1;DATA!1:1;0)-1))-1)"
data_validation2 = DataValidation(type='list', formula1=formula2, allow_blank=True)
sheet1.add_data_validation(data_validation2)
data_validation2.add("B1")
wb.save("example.xlsx")
ПРИМЕЧАНИЕ. Сейчас я пытаюсь использовать другой подход к справиться с ошибкой с помощью формулы Excel , в зависимости от того, что произойдет раньше, решить мою проблему.