在数据处理和报告生成场景中,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.TextBoxes、Worksheet.CheckBoxes 等属性获取,同样调用 SaveToImage() 方法即可导出。
注意事项
- 图表与图表工作表的区别 :
Workbook.SaveChartAsImage(worksheet, index)方法适用于普通工作表中嵌入的图表,而图表工作表需要使用Workbook.SaveChartAsImage(chartsheet)的重载方法。如果混淆这两种调用方式,可能会导致类型错误或无法正确导出。 - 资源释放 :操作完成后,调用
workbook.Dispose()有助于及时释放文件句柄和内存资源,避免因重复操作导致的内存占用问题。 - 授权说明:该库提供免费版本供开发测试使用,免费版可能对某些功能或文件处理规模有所限制。在项目集成前,建议查阅其授权条款,确认是否符合使用场景。
总结
通过 Spire.XLS for Python 提供的 SaveChartAsImage 和 SaveToImage 方法,可以较为简洁地实现 Excel 中图表和形状的批量导出。这种方法避免了依赖本地 Excel 程序的复杂性,适合在自动化脚本或服务端应用中使用。实际使用时,需要根据图表类型(普通工作表图表或图表工作表)选择合适的方法,并留意资源释放等细节。