Python 一键导出 Excel 中的图表和形状为图片

在数据处理和报告生成场景中,Excel 文件中的图表和形状往往需要被提取为独立的图片文件,以便用于演示文稿、网页展示或进一步的可视化分析。手动逐项导出的方式效率较低,难以应对批量处理需求。本文将介绍如何利用 Spire.XLS for Python 库,通过 Python 代码将 Excel 工作表中的图表和形状导出为图片,并保存为 PNG、JPG 等常见格式。

该库的一个特点是独立于本地安装的 Microsoft Office 环境运行,可以在服务器端或没有图形界面的 Linux 环境中部署和使用。

环境配置

开始之前,需要通过 pip 安装所需的库:

bash 复制代码
pip install Spire.XLS

如果使用该库的免费版本,对应的包名为 spire.xls.free。安装完成后,即可在 Python 脚本中引用相关模块。

导出工作表中的图表为图片

对于嵌入在工作表中的图表,可以使用 Workbook.SaveChartAsImage() 方法将其保存为图片流。该方法支持导出单个图表或工作表中的所有图表。

以下示例演示了如何将指定工作表中的所有图表导出为 PNG 图片:

python 复制代码
from spire.xls import Workbook

# 创建 Workbook 对象并加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile("示例.xlsx")

# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 遍历工作表中的所有图表并导出为图片
for i in range(sheet.Charts.Count):
    image = workbook.SaveChartAsImage(sheet, i)
    image.Save(f"图表_{i}.png")

workbook.Dispose()

如果只需要导出工作表中的特定图表,可以在 SaveChartAsImage 方法中指定图表索引,索引从 0 开始。

导出图表工作表中的图表

在 Excel 中,图表工作表(Chart Sheet)是一种特殊的工作表类型,其整个页面仅用于显示单个图表,不包含单元格数据。针对这种类型,需要使用不同的方法进行导出:

python 复制代码
from spire.xls import Workbook

workbook = Workbook()
workbook.LoadFromFile("示例.xlsx")

# 获取第一个图表工作表
chart_sheet = workbook.Chartsheets[0]

# 将图表工作表导出为图片
image = workbook.SaveChartAsImage(chart_sheet)
image.Save("图表工作表.png")

workbook.Dispose()

导出工作表中的形状为图片

除了图表,Excel 工作表中还可能包含文本框、几何形状、组合框等各类形状元素。这些形状可以通过 Worksheet.PrstGeomShapes 属性获取,然后使用 XlsShape.SaveToImage() 方法导出为图片。

python 复制代码
from spire.xls import Workbook, XlsShape

workbook = Workbook()
workbook.LoadFromFile("示例.xlsx")

sheet = workbook.Worksheets[0]

# 遍历所有预设几何形状
for i, shape in enumerate(sheet.PrstGeomShapes):
    # 将形状转换为 XlsShape 对象
    xls_shape = XlsShape(shape)
    image = xls_shape.SaveToImage()
    image.Save(f"形状_{i}.png")

workbook.Dispose()

对于文本框、复选框等其他类型的元素,可以通过 Worksheet.TextBoxesWorksheet.CheckBoxes 等属性获取,同样调用 SaveToImage() 方法即可导出。

注意事项

  • 图表与图表工作表的区别Workbook.SaveChartAsImage(worksheet, index) 方法适用于普通工作表中嵌入的图表,而图表工作表需要使用 Workbook.SaveChartAsImage(chartsheet) 的重载方法。如果混淆这两种调用方式,可能会导致类型错误或无法正确导出。
  • 资源释放 :操作完成后,调用 workbook.Dispose() 有助于及时释放文件句柄和内存资源,避免因重复操作导致的内存占用问题。
  • 授权说明:该库提供免费版本供开发测试使用,免费版可能对某些功能或文件处理规模有所限制。在项目集成前,建议查阅其授权条款,确认是否符合使用场景。

总结

通过 Spire.XLS for Python 提供的 SaveChartAsImageSaveToImage 方法,可以较为简洁地实现 Excel 中图表和形状的批量导出。这种方法避免了依赖本地 Excel 程序的复杂性,适合在自动化脚本或服务端应用中使用。实际使用时,需要根据图表类型(普通工作表图表或图表工作表)选择合适的方法,并留意资源释放等细节。

相关推荐
用户8130077816371 小时前
PageHelper分页查询步骤
后端
是小李呀1 小时前
MyBatis、MyBatis-Plus 与全自动 ORM 的本质区别
后端
汤米粥1 小时前
Python爬虫——json解析
爬虫·python·json
小堂子这厢有礼了1 小时前
Chet.Admin 权限模型:菜单级 + 按钮级 + 行级三层防护
前端·后端·信息可视化·前端框架·.net
SimonKing1 小时前
Spring Boot 4.0 + gRPC 极简集成:4步搞定,比REST还丝滑
java·后端·程序员
武陵悭臾1 小时前
Python应用开发学习:如何让随机数按一定比列出现
python·学习·random·概率·随机数
amongdata2 小时前
MyVoiceTyping:面向中文语音输入的本地优先开源方案
python·开源·音视频·语音识别
薛定猫AI2 小时前
【技术干货】大模型检查点可靠性评测:基于 Python 构建幻觉与指令遵循测试
开发语言·python
IT_陈寒2 小时前
Vue的这个响应式陷阱,让我加班到凌晨三点
前端·人工智能·后端