我正在使用 openpyxl 打开一个模板文件,该文件的数据验证深入到大约 5 列中的第 500 行。在我的 python 脚本中,我将数据从 Oracle 加载到电子表格的左半部分,数据验证列位于右侧。
如果我插入的数据只有 50 行,我需要删除 450 行的数据验证条目和公式。但从 openpyxl 中的特定单元格中删除验证规则似乎是不可能的。
看来我可能不得不忘记拥有一个包含最多 500 行数据验证的模板,并手动创建验证规则,这是我希望避免的。预先填充模板要容易得多,只需删除我不需要的内容即可。
下面这个不起作用,因为“validation.sqref”类似于“M2:500”(因为这是验证规则所在的位置),因此永远不会匹配当前迭代中单元格的单元格引用。
for row in range(start_row_to_delete, ws_data.max_row + 1):
for col in range(1, ws_data.max_column + 1):
cell = ws_data.cell(row=row, column=col)
if ws_data.data_validations:
for validation in ws_data.data_validations.dataValidation:
if validation.sqref == cell.coordinate:
ws_data.data_validations.remove(validation)
您处理此问题和实现代码的方式存在一些问题。
然而,主要问题使该方法变得过时,我认为无论如何,这都是浪费时间。
DataValidation 没有删除选项,因此如果执行了
ws_data.data_validations.remove(validation)
行,则没有方法 .remove()
。此外,您要删除的“验证”是整个工作表范围,因此如果您可以通过该方法删除它,则整个 DV 范围都将被删除。