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

如何从Excel文件中完整提取与文本、线条成组的批量图片

问题原因

你目前使用的将xlsx改后缀为zip后提取xl/media目录的方案,只能拿到Excel文件中存储的原始插入图片素材。你手动添加的文本框、箭头等形状元素,以及多元素成组的配置,都属于Excel的视图渲染规则,不会被合并存储为独立图片文件放在media目录下,因此该方法无法得到包含附加元素的完整合成图。

解决方案

使用win32com调用Excel原生接口导出
你已经在代码中引入了win32com库,可以直接调用Excel的内置能力,将成组的形状整体复制后导出为完整图片,以下是修改后的可运行代码:

import os
import win32com.client as win32
from PIL import ImageGrab

path = 'C:/Users/Peter/Desktop/test/'
# 初始化Excel应用
excel = win32.gencache.EnsureDispatch('Excel.Application')
# 设置Excel窗口不可见,后台运行
excel.Visible = False
excel.DisplayAlerts = False

number = 0

for file in os.listdir(path):
    if not file.endswith('.xlsx'):
        continue
    file_path = os.path.join(path, file)
    # 打开工作簿
    wb = excel.Workbooks.Open(file_path)
    # 遍历所有工作表
    for ws in wb.Worksheets:
        # 遍历工作表内所有形状
        for shape in ws.Shapes:
            # 仅导出成组形状可放开下方注释
            # if shape.Type != 6:
            #     continue
            # 复制形状到剪贴板
            shape.Copy()
            # 从剪贴板获取图片
            img = ImageGrab.grabclipboard()
            if img:
                save_path = os.path.join(path, f"{number}.jpg")
                img.convert("RGB").save(save_path, "JPEG")
                number += 1
    wb.Close(SaveChanges=False)
# 退出Excel应用
excel.Quit()
注意事项
  • 运行前请确保安装所需依赖:pip install pywin32 pillow
  • 代码运行期间不要操作Excel窗口或修改剪贴板内容,避免导出失败
  • 只需要导出成组元素的话,放开代码中关于shape.Type的判断即可过滤未组合的独立元素
    内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:45:04