Openpyxl更新数据验证

时间:2015-08-06 15:47:43

标签: openpyxl validation

我想在Excel工作表中创建一个下拉列表,并在加载此工作表时能够更新它。当我更改DataValidation列表中的项目并将其添加到工作表时,列表不会更改。

有没有办法更新我的列表或只删除它?

wb = openpyxl.load_workbook(path)

ws_meteo = wb.active

dv = DataValidation(type="list", formula1=Formule, allow_blank=True)

dv.add_cell(ws_meteo['A10'])

ws_meteo.add_data_validation(dv)

wb.save(path)

1 个答案:

答案 0 :(得分:0)

晚了五年。我想我也遇到过与您相同的问题。

我有一个excel文件,该文件需要基于外部Web服务的单个单元格的唯一数据验证列表。当单元中不存在数据验证时,此方法会很好地工作。但是,如果存在数据验证列表,它将附加另一个数据验证列表到单元格。在Excel中打开文件时,似乎选择了遇到的第一个数据验证列表,因此下拉列表永远不会更改。

我通过在添加新单元格之前删除了该单元格的所有现有数据验证来解决此问题。我使用了以下代码。

def removeExistingCellDataValidation(worksheet, cell):
    toRemove = []

    # Append all validation rules for cell to be removed.
    for validation in worksheet.data_validations.dataValidation:
        if validation.__contains__(cell):
            toRemove.append(validation)

    # Process all data validation rules set for removal.
    for rmValidation in toRemove:
        worksheet.data_validations.dataValidation.remove(rmValidation)

清除现有数据验证后,我照常添加新的数据验证列表,就像您在代码段中所做的一样。