无法让 openpyxl 数据验证工作

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

我正在尝试按照 openpyxl documentaion 对一组单元格启用数据验证,但是当我打开文件时没有任何变化。 我已经在程序的另一部分成功锁定/解锁了本工作簿中的单元格。

import openpyxl

file_path = 'file.xlsx'
sheet_name = 'Sheet1'

workbook = openpyxl.load_workbook(filename=file_path, read_only=False)
ws = workbook[sheet_name]
cells = [ws.cell(1,1), ws.cell(1,2), ws.cell(1,3)]

validator_type = 'whole'
validator = openpyxl.worksheet.datavalidation.DataValidation(type=validator_type)
ws.add_data_validation(validator)

for cell in cells:
    validator.add(cell)

workbook.save(file_path)

在尝试解决这个问题时,我:

  • 阅读文档
  • 将函数简化为上面的代码片段。
  • 谷歌搜索了几个小时,包括这里。
python excel openpyxl
1个回答
0
投票

进一步评论。
默认情况下,单元格将具有如下所示的数据验证(DV)设置;


您的代码将三个单元格的“允许”选项(类型)设置为“整体”(整数),如下所示

但是您没有为“数据”以及随后的“公式”设置任何内容(这取决于您为“数据”设置的内容)。

即如 Openpyxl 示例所示,当您将类型设置为“整体”时,您将设置所有三个值

validator = DataValidation(type="whole",
                    operator="greaterThan",
                    formula1=100)

仅设置 type="whole" 表示 DV 无效。
如果您在 Excel 中尝试这样做,只需将“允许”设置为“整数”,然后单击“确定”,您就会收到错误消息。

额外信息
工作表 xml ('sheet1.xml')
DV 代码应将“dataValidations”部分添加到工作表 xml 中,如下所示。

<dataValidations count="1">
<dataValidation sqref="A1 B1 C1" showDropDown="0" showInputMessage="0" showErrorMessage="0" allowBlank="0" type="whole"/>
</dataValidations>
© www.soinside.com 2019 - 2024. All rights reserved.