You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:18:01