使用Python在Excel指定行单元格范围添加数据验证及问题解决
问题根源
你使用的是XlsxWriter库的data_validation方法,当前参数顺序传递错误,该方法的标准参数顺序为:
worksheet.data_validation(起始行号, 起始列号, 结束行号, 结束列号, 配置字典)
你现有代码中把列号、行号参数顺序搞混,且将第2个参数写死为3,导致数据验证被添加到了错误的单元格位置,甚至超出有效范围不生效。
修正代码
如果只需要给当前循环到的Action表头所在单元格添加下拉验证:
heading_list= ['apple','type','Action','method'] for j, t in enumerate(heading_list): worksheet.write(row + 1, col + j, t, header_format) if t == 'Action': # 只给当前行的Action列单个单元格加验证 worksheet.data_validation( row+1, # 起始行 col+j, # 起始列(Action对应的列号) row+1, # 结束行 col+j, # 结束列 {'validate': 'list', 'source': ['Insert', 'Update']} )
如果需要给Action列除表头外的整列指定范围(比如从表头下一行到第100行)添加验证,调整结束行参数即可:
if t == 'Action': action_col = col + j # 给第row+2行到第100行的Action列加验证,可根据你的实际数据行数调整结束行 worksheet.data_validation(row+2, action_col, 100, action_col, {'validate': 'list', 'source': ['Insert', 'Update']})
其他排查点
- 确认你使用的是XlsxWriter库,openpyxl、pandas内置的Excel写入方法不支持该语法的
data_validation调用 - 写入完成后必须正常调用
workbook.close()或者用with上下文管理器生成Excel文件,未正常保存的文件会丢失配置
内容的提问来源于stack exchange,提问作者riza
相关产品推荐
相关产品推荐

