Python向已有Excel指定单元格写入值报AttributeError如何解决
问题原因
报错是因为混淆了openpyxl中Workbook(工作簿)和Worksheet(工作表)两个对象的属性:
.active是Workbook对象的内置属性,作用是返回工作簿打开时默认处于激活状态的工作表,Worksheet对象本身没有这个属性- 代码里已经通过
workbook["new_sheet"]拿到了目标工作表的Worksheet实例ws4,再执行ws4.active就会触发你看到的属性错误
另外原代码还有两处冗余逻辑:
- 导入
pandas读文件的步骤没有参与后续任何修改操作,完全多余 - 导入
Workbook类是用来新建空白工作簿的,加载现有文件的场景不需要这个导入
修复后代码
直接删掉错误的.active调用和冗余代码即可,完整可运行代码如下:
from openpyxl import load_workbook file_source = r'C:\Users\user\Desktop\Data.xlsx' # 加载目标Excel文件 workbook = load_workbook(filename=file_source) # 定位到名为new_sheet的工作表 ws = workbook["new_sheet"] # 直接给D1单元格赋值 ws["D1"] = "Latest Price" # 保存修改 workbook.save(filename=file_source)
运行效果参考:
补充说明
- 如果要操作的工作表是文件打开时默认激活的表,才需要用
ws = workbook.active的写法,已知工作表名的情况下直接按表名索引更准确,不会因为用户上次打开文件时激活的表变化导致操作错工作表 - 给单元格赋值时,
工作表对象["单元格坐标"] = 值就是最直接的写法,拿到工作表对象后不需要额外执行"打开"操作
内容的提问来源于stack exchange,提问作者CanaryTheBird
相关产品推荐
相关产品推荐

