如何使用pandas(xlsxwriter)设置Excel中受保护(锁定)单元格的列宽度
问题根因
你的代码不生效主要有三个核心问题:
- 格式被覆盖:你为A-E列设置锁定格式后,又调用
set_column(3,4,150)调整D、E列宽度,调用时没有传入之前的锁定格式,直接覆盖了该区域的格式配置 - 保护开启时机错误:
worksheet.protect()应该放在所有格式配置完成之后执行,避免后续格式配置不生效 - 未处理默认锁定状态:Excel所有单元格默认
locked属性为True,如果你想要仅锁定A-E列、其余区域可编辑,需要先将全局单元格设置为未锁定,再单独给目标列加锁定格式
修复后代码
场景1:锁定整张工作表所有单元格
workbook = writer.book user_input = writer.sheets['user-input-swagger'] locked_format = workbook.add_format() locked_format.set_locked(True) # 先完成所有格式、宽度配置 user_input.set_column('A:C', None, locked_format) # 调整D、E列宽度时同步传入锁定格式,避免覆盖 user_input.set_column(3,4,150, locked_format) # 所有配置完成后再开启保护 user_input.protect() writer.save()
场景2:仅锁定A-E列,其余区域可编辑
workbook = writer.book user_input = writer.sheets['user-input-swagger'] # 先设置全局单元格为未锁定 unlocked_format = workbook.add_format() unlocked_format.set_locked(False) # 最大列数可根据你的实际表结构调整,这里设为100覆盖常用范围 user_input.set_column(0, 100, None, unlocked_format) # 配置目标列锁定格式 locked_format = workbook.add_format() locked_format.set_locked(True) user_input.set_column('A:C', None, locked_format) user_input.set_column(3,4,150, locked_format) # 最后开启保护 user_input.protect() writer.save()
内容的提问来源于stack exchange,提问作者DX9807
相关产品推荐
相关产品推荐

