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

如何用Python仅打开一次Excel文件,同时追加DataFrame与图片至不同工作表?

解决方案

完全可以只打开一次Excel文件,高效完成DataFrame写入和图片插入操作。借助你已经在用的openpyxl引擎的原生API,就能在同一个pd.ExcelWriter会话里完成所有操作,避免多次打开关闭文件带来的性能损耗。

基于本地图片文件的实现(沿用你现有保存图片的逻辑)

修改后的代码如下,注释已标注关键细节:

import pandas as pd
import matplotlib.pyplot as plt
from openpyxl.drawing.image import Image

# 替换成你的实际DataFrame
df = pd.DataFrame({'列1': [1, 2, 3], '列2': [4, 5, 6]})

# 生成并保存图片(你的原有代码)
plt.plot(df['列1'], df['列2'])
plt.savefig('image.png', dpi=1200, bbox_inches='tight')
plt.close()  # 关闭绘图对象,避免内存泄漏

# 仅一次打开Excel文件
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl', mode='a', if_sheet_exists='replace')

# 写入DataFrame到指定工作表(注意index是布尔值,不要加引号)
df.to_excel(writer, sheet_name='Sheet', index=False)

# 获取工作簿对象,开始处理图片插入
workbook = writer.book

# 处理图片工作表:如果存在则删除(可根据需求调整为追加模式)
image_sheet_name = '图片工作表'
if image_sheet_name in workbook.sheetnames:
    del workbook[image_sheet_name]
# 创建新的图片工作表
image_sheet = workbook.create_sheet(image_sheet_name)

# 加载图片并插入到工作表的指定位置(比如A1单元格)
img = Image('image.png')
image_sheet.add_image(img, 'A1')

# 一次性保存所有修改并关闭文件
writer.save()
writer.close()

优化方案:内存中处理图片(无需生成本地文件)

如果不想在本地生成图片文件,可以用io.BytesIO在内存中暂存图片,进一步提升效率:

import pandas as pd
import matplotlib.pyplot as plt
from openpyxl.drawing.image import Image
import io

# 替换成你的实际DataFrame
df = pd.DataFrame({'列1': [1, 2, 3], '列2': [4, 5, 6]})

# 生成图片并保存到内存缓冲区
img_buffer = io.BytesIO()
plt.plot(df['列1'], df['列2'])
plt.savefig(img_buffer, dpi=1200, bbox_inches='tight')
img_buffer.seek(0)  # 将缓冲区指针移到开头,方便后续读取
plt.close()

# 仅一次打开Excel文件
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl', mode='a', if_sheet_exists='replace')

# 写入DataFrame
df.to_excel(writer, sheet_name='Sheet', index=False)

# 处理图片工作表
workbook = writer.book
image_sheet_name = '图片工作表'
if image_sheet_name in workbook.sheetnames:
    del workbook[image_sheet_name]
image_sheet = workbook.create_sheet(image_sheet_name)

# 从内存加载图片并插入
img = Image(img_buffer)
image_sheet.add_image(img, 'A1')

# 保存修改并关闭
writer.save()
writer.close()

关键细节说明

  • 通过writer.book直接获取openpyxl的Workbook对象,无需单独再次打开Excel文件
  • 图片工作表的逻辑可灵活调整:如果需要在已有工作表追加图片,删除del workbook[image_sheet_name],改用image_sheet = workbook[image_sheet_name]即可
  • 插入位置可自定义,比如'B2'表示从B2单元格开始放置图片
  • 修正了你原有代码中index='False'的错误:这里需要传入布尔值False,字符串会导致索引列被命名为'False'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:01:18