使用 openpyxl 创建评估为错误的 DataValidation
Creating DataValidation that evaluates to an error with openpyxl
使用 python 和 openpyxl 我正在尝试使用 DataValidation like in example from this article 创建依赖数据列表。
当我直接指向某些范围的单元格时,DataValidation 工作正常。但是,当我创建级联时,结果 excel 文件已损坏,只能在恢复模式下打开。
我现在唯一的猜测是,当第一列为空时,它可能与错误有关,然后在保存级联 DataValidation excel 后显示错误弹出窗口
The Source currently evaluates to an error. Do you want to continue?
在 excel 中手动执行时,我们仍然可以保存此类潜在错误的 DataValidation。它只会给我们留下空的数据列表。
所以我的问题是openpyxl不支持这样的错误吗?或者是否有一些 DataValidation
我错过了静默跳过此类错误的论点?任何其他创建 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-专家告诉我 ,
vs ;
我的问题是我试图将 分号 分隔的 openpyxl 公式放入我的 excel 中,但库仅使用 逗号 用于此目的,无论 windows 区域设置如何。
再次被 windows 愚弄...希望这会为其他人节省我浪费在发现错误上的许多时间。
#working formula, replaced semicolons with commas
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)"
使用 python 和 openpyxl 我正在尝试使用 DataValidation like in example from this article 创建依赖数据列表。
当我直接指向某些范围的单元格时,DataValidation 工作正常。但是,当我创建级联时,结果 excel 文件已损坏,只能在恢复模式下打开。
我现在唯一的猜测是,当第一列为空时,它可能与错误有关,然后在保存级联 DataValidation excel 后显示错误弹出窗口
The Source currently evaluates to an error. Do you want to continue?
在 excel 中手动执行时,我们仍然可以保存此类潜在错误的 DataValidation。它只会给我们留下空的数据列表。
所以我的问题是openpyxl不支持这样的错误吗?或者是否有一些 DataValidation
我错过了静默跳过此类错误的论点?任何其他创建 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-专家告诉我 ,
vs ;
我的问题是我试图将 分号 分隔的 openpyxl 公式放入我的 excel 中,但库仅使用 逗号 用于此目的,无论 windows 区域设置如何。
再次被 windows 愚弄...希望这会为其他人节省我浪费在发现错误上的许多时间。
#working formula, replaced semicolons with commas
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)"