You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用openpyxl写入XLSM文件:设置单元格值不生效的解决办法

嘿,我明白你的困扰了——代码跑起来没报错,但目标单元格A1还是空空如也,对吧?咱们来拆解下问题,一步步修复:

首先排查最容易踩的坑:工作表索引搞错了

你代码里用了wb.worksheets[1],但Python里列表是0起始索引,这意味着你修改的是第二个工作表的A1单元格!如果你实际想改的是第一个工作表的A1,得改成wb.worksheets[0],或者更直观的用工作表名称调用,比如wb['Sheet1'](把Sheet1换成你实际的表名),这样就不会因为索引搞混工作表了。

处理XLSM文件必须加的参数:keep_vba=True

openpyxl默认处理xlsm(带宏的Excel文件)时会丢弃宏内容,而且如果不指定keep_vba=True,保存后的文件结构可能会出问题,导致你写入的数据无法正确持久化。哪怕你不需要保留宏,这个参数也能确保xlsm文件被正确读写。

还有个小细节:导入语句要对应

你代码里写了import openpyxl但直接调用load_workbook(),这其实会触发NameError(除非你实际代码里补了from openpyxl import load_workbook)。两种写法选一种就行:要么直接导入load_workbook,要么用openpyxl.load_workbook()调用。

修复后的完整代码

from openpyxl import load_workbook

# 打开xlsm文件时指定keep_vba=True,确保文件结构正确
wb = load_workbook('Test.xlsm', keep_vba=True)
# 选择第一个工作表(或者换成你要操作的表名,比如wb['Sheet1'])
ws = wb.worksheets[0]
# 给A1单元格赋值
ws.cell(row=1, column=1).value = 999999
# 保存文件
wb.save('Test.xlsm')

运行这段代码后,你再打开Test.xlsm的第一个工作表,A1应该就能看到999999啦!

内容的提问来源于stack exchange,提问作者nel_junior000

火山引擎 最新活动