[使用python和openpyxl,我正在尝试使用DataValidation创建数据的依赖列表,例如this article中的示例。
DataValidation在我直接指向某个范围的单元格时工作正常。但是,当我创建层叠时,生成的excel文件已损坏,只能在恢复模式下打开。
我现在唯一的猜测是,当第一列为空时,可能与错误有关,然后在保存级联的DataValidation后excel显示错误弹出窗口
源当前评估为错误。您要继续吗?
仍然可以在excel中手动保存此类可能错误的DataValidation。只是留下了空的数据列表。
所以我的问题是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")
注意:我现在正在尝试对handle error with excel formula使用不同的方法,以先到者为准可以解决我的问题。
所以我的朋友excel专家将我指向,
vs ;
我的坏处是,我尝试像在excel中一样将openpyxl公式放入以分号>>分隔,但是无论Windows区域设置如何,库仅为此目的使用逗号。
再次被Windows欺骗...希望这可以节省我在发现错误上所浪费的很多时间。
,