使用 openpyxl 删除现有数据验证

问题描述 投票:0回答:2

我正在使用 openpyxl ws.add_data_validation 向 Excel 中的单元格添加一些验证。但是,我发现如果单元格之前进行了一些验证,那么当我随后在 Excel 应用程序中打开它时,它似乎不会接受新的验证。如果我在运行程序之前手动清除目标文件中的先前验证,那么它将接受新的验证。我的代码是:

dv = DataValidation(type='list', formula="{0}!$B$2:$B$18".format(quote_sheetname('values')))
ws.add_data_validation(dv)

row = 3
while row <= ws.max_row:
    dv.add('F{}'.format(row))
    row += 1

我认为在执行 dv.add 命令之前我可能需要删除现有的验证,但我在文档中看不到有关删除预先存在的验证的任何内容。

有人知道如何做到这一点吗?

python openpyxl
2个回答
0
投票

我发现删除数据验证的方法:

from openpyxl.worksheet.datavalidation import DataValidationList
ws.data_validations = DataValidationList()  # ws is the worksheet object.

注意:上面的代码将从工作表中删除所有数据验证。


0
投票

您实际上不需要清除所有数据验证。 解决方案虽然是间接的,但已在here给出:

保存工作簿时,将忽略没有任何单元格范围的验证。

所以基本上可以归结为:

for dv in workbook_object[worksheet_name].data_validations.dataValidation:
    if some_condition:
        dv.sqref = ''
© www.soinside.com 2019 - 2024. All rights reserved.