在openpyxl中锁定首列后,如何解锁列宽与行高调整权限?
解决方案
要实现锁定第一列同时允许用户调整列宽行高,得调整操作顺序和保护参数,具体步骤如下:
先解锁所有单元格
Excel默认所有单元格都是锁定状态,所以第一步要把所有单元格的锁定状态关掉,这样后续只需要单独锁定第一列就行。锁定第一列的所有单元格
遍历第一列的每个单元格,把它们的锁定状态设为True。开启工作表保护并放开调整权限
开启工作表保护的同时,设置允许调整列宽和行高的参数,这样用户就能正常调整列宽行高,同时第一列保持锁定。
完整代码示例:
from openpyxl.styles import Protection # 解锁所有单元格 for row in ws.iter_rows(): for cell in row: cell.protection = Protection(locked=False) # 锁定第一列的所有单元格 for row in ws.iter_rows(min_col=1, max_col=1): for cell in row: cell.protection = Protection(locked=True) # 开启工作表保护,允许调整列宽和行高 ws.protection.sheet = True # 允许调整列宽 ws.protection.allowColumnWidth = True # 允许调整行高 ws.protection.allowRowHeight = True # 可选:设置保护密码 # ws.protection.password = "your_password_here"
补充说明
- 如果你的openpyxl版本较低(比如2.6.x及更早),没有
allowColumnWidth和allowRowHeight参数,可以用allowFormattingColumns和allowFormattingRows替代,因为调整列宽行高属于格式设置范畴:ws.protection.allowFormattingColumns = True ws.protection.allowFormattingRows = True - 不要先开启工作表保护再设置单元格锁定,应该先调整好所有单元格的锁定状态,最后再开启保护,避免设置不生效。
内容的提问来源于stack exchange,提问作者w1am
相关产品推荐
相关产品推荐

