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

使用openpyxl向含图片的Excel添加图片时文件损坏问题

问题描述

使用Python的openpyxl库向Excel文件中添加图片时出现异常:首次在空白Excel文件上运行代码,图片可正常粘贴到工作表中;第二次运行完全相同的代码后,Excel文件损坏。该问题仅发生在向已有图片的工作表重复添加图片的场景下。

相关代码

图片文件:test1.png、test2.png

import os
import openpyxl


print(os.getcwd())

file_name = 'a.xlsx'
wb = openpyxl.load_workbook(file_name)   # 打开已存在的Excel文件
ws = wb["Sheet1"]  # 设置活动工作表
sheet = wb.active
ws['a2'].value = 11112
wb.save(file_name)


#------------------将图片附加到单元格并修改图片尺寸-----
# ws = wb.worksheets[0]  # 默认Sheet1工作表

img = openpyxl.drawing.image.Image('test2.png')
img.height = 238
img.width = 356
ws.add_image(img, 'B6')
img = openpyxl.drawing.image.Image('test1.png')
img.height = 238
img.width = 356
ws.add_image(img, 'I6')  # 在I6位置添加图片到文件

wb.save(file_name)
解决方案

问题根源

代码中存在两次wb.save()调用,第一次保存后,文件的内部资源(尤其是图片相关的嵌入对象)未被正确释放,后续继续修改并再次保存时,openpyxl无法正确处理已有图片的文件结构,导致文件损坏。

修改后的代码

将中间的wb.save(file_name)移除,所有修改操作完成后仅执行一次保存:

import os
import openpyxl

print(os.getcwd())

file_name = 'a.xlsx'
wb = openpyxl.load_workbook(file_name)   # 打开已存在的Excel文件
ws = wb["Sheet1"]  # 设置活动工作表
sheet = wb.active
ws['a2'].value = 11112

#------------------将图片附加到单元格并修改图片尺寸-----
img = openpyxl.drawing.image.Image('test2.png')
img.height = 238
img.width = 356
ws.add_image(img, 'B6')
img = openpyxl.drawing.image.Image('test1.png')
img.height = 238
img.width = 356
ws.add_image(img, 'I6')  # 在I6位置添加图片到文件

wb.save(file_name)

额外建议

如果确实需要分阶段保存文件,每次保存后必须关闭工作簿对象,再重新打开进行后续操作,避免资源冲突:

# 第一阶段:修改单元格并保存
file_name = 'a.xlsx'
wb = openpyxl.load_workbook(file_name)
ws = wb["Sheet1"]
ws['a2'].value = 11112
wb.save(file_name)
wb.close()  # 关闭工作簿释放资源

# 第二阶段:添加图片并保存
wb = openpyxl.load_workbook(file_name)
ws = wb["Sheet1"]
img = openpyxl.drawing.image.Image('test2.png')
img.height = 238
img.width = 356
ws.add_image(img, 'B6')
img = openpyxl.drawing.image.Image('test1.png')
img.height = 238
img.width = 356
ws.add_image(img, 'I6')
wb.save(file_name)
wb.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:48:19