如何从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
相关产品推荐
相关产品推荐

