Python 实用技巧:使用 Spire.XLS 将 Excel 文件转换为 PDF
将 Excel 文件转换为 PDF 格式是办公自动化中的常见需求。这种转换可以方便地储存表格数据,确保在打印或共享文档时,表格的样式、布局及字体在不同设备和操作系统上保持一致,避免因版本差异导致的排版错乱。
使用 Python 第三方库 Spire.XLS 将 Excel 文件转换为 PDF 的完整方案。内容包括环境搭建、三种典型应用场景的实现代码:整本合并转换、分表独立转换以及自定义页面边距与纸张尺寸的转换。文章详细讲解了 Workbook 与 Worksheet 的核心 API 用法,并补充了资源释放、路径处理及许可证注意事项,旨在帮助开发者解决跨平台文档排版一致性问题。

将 Excel 文件转换为 PDF 格式是办公自动化中的常见需求。这种转换可以方便地储存表格数据,确保在打印或共享文档时,表格的样式、布局及字体在不同设备和操作系统上保持一致,避免因版本差异导致的排版错乱。
本文将详细介绍如何使用第三方 Python 库 Spire.XLS for Python 实现 Excel 转 PDF 的几种常见场景,包括整本转换、分表转换以及自定义页面设置。
在使用 Spire.XLS 之前,需要确保已安装 Python 环境(建议 Python 3.6+),并通过 pip 安装依赖库。
打开终端或命令行工具,执行以下命令:
pip install Spire.XLS
注意:Spire.XLS for Python 是商业组件,免费试用版生成的 PDF 文件可能会带有水印。生产环境建议使用授权版本。
在 Python 脚本中导入必要的类:
from spire.xls import *
Spire.XLS 提供了丰富的 API 来操作 Excel 工作簿和工作表。主要涉及两个核心方法:
Workbook.SaveToFile(): 将整个工作簿保存为指定格式。Worksheet.SaveToPdf(): 将单个工作表直接保存为 PDF。此外,可以通过 PageSetup 类精细控制页面边距、纸张大小和方向。
此方法适用于希望将所有工作表合并到一个 PDF 文件中,且每个工作表占据一页的场景。
from spire.xls import *
# 创建 Workbook 对象
workbook = Workbook()
try:
# 加载 Excel 文档
# 请确保文件路径正确,支持相对路径或绝对路径
workbook.LoadFromFile("data.xlsx")
# 设置工作表适应页面
# SheetFitToPage=True 表示内容会自动缩放以适应页面宽度
workbook.ConverterSetting.SheetFitToPage = True
# 将 Excel 转换为 PDF
# FileFormat.PDF 指定输出格式
workbook.SaveToFile("output_single.pdf", FileFormat.PDF)
print("转换成功:所有工作表已合并至 output_single.pdf")
except Exception as e:
print(f"发生错误:{e}")
finally:
# 释放资源
workbook.Dispose()
当工作表较多或需要独立分发时,可以将每个工作表保存为独立的 PDF 文件。
from spire.xls import *
import os
# 创建 Workbook 对象
workbook = Workbook()
try:
# 加载 Excel 文件
workbook.LoadFromFile("data.xlsx")
# 遍历 Excel 工作簿中的所有工作表
for sheet in workbook.Worksheets:
# 获取工作表名称,用于生成文件名
sheet_name = sheet.Name
# 清理文件名中的非法字符(可选)
safe_name = "".join([c if c.isalnum() else '_' for c in sheet_name])
FileName = f"{safe_name}.pdf"
# 将每个工作表都保存为一个单独的 PDF 文件
sheet.SaveToPdf(FileName)
print(f"已生成:{FileName}")
print("所有工作表转换完成。")
except Exception as e:
print(f"转换过程中出错:{e}")
finally:
# 释放资源
workbook.Dispose()
对于报表类数据,可能需要精确控制页边距、纸张尺寸和方向。通过 PageSetup 对象可以实现这些配置。
from spire.xls import *
# 创建 Workbook 对象
workbook = Workbook()
try:
# 加载 Excel 文件
workbook.LoadFromFile("report_data.xlsx")
# 获取指定的工作表(索引从 0 开始,此处获取第二个工作表)
sheet = workbook.Worksheets[1]
# 获取 PageSetup 对象以进行页面设置
pageSetup = sheet.PageSetup
# 设置页边距(单位:英寸)
pageSetup.TopMargin = 0.5
pageSetup.BottomMargin = 0.5
pageSetup.LeftMargin = 0.5
pageSetup.RightMargin = 0.5
# 设置页面尺寸 (PaperSizeType 枚举)
# 例如:A4, A3, Letter 等
pageSetup.PaperSize = PaperSizeType.PaperA4
# 设置页面方向
pageSetup.Orientation = OrientationType.Portrait # Portrait: 纵向, Landscape: 横向
# 设置转换时工作表适应页面
workbook.ConverterSetting.SheetFitToPage = True
# 将该工作表保存为 PDF 文件
sheet.SaveToPdf("custom_report.pdf")
print("自定义页面设置转换完成。")
except Exception as e:
print(f"转换失败:{e}")
finally:
# 释放资源
workbook.Dispose()
在处理大型 Excel 文件时,内存占用可能较高。务必在代码块末尾调用 workbook.Dispose() 或 sheet.Dispose() 来显式释放非托管资源,防止内存泄漏。
如果文件路径包含中文或非 ASCII 字符,在某些操作系统下可能会出现读取错误。建议尽量使用英文路径,或在加载前对路径进行编码处理。
虽然可以使用 openpyxl 读取 Excel 数据,但将其渲染为 PDF 通常需要结合 reportlab 或 wkhtmltopdf,过程较为复杂且难以完美还原原始样式。Spire.XLS 的优势在于能够直接保留 Excel 的公式、图表、条件格式等视觉元素,适合对排版要求较高的场景。
请注意,未授权的试用版本生成的 PDF 文件通常会在底部添加水印。若用于商业项目,请务必购买正式许可证。
通过 Spire.XLS for Python,开发者可以高效地在 Python 环境中实现 Excel 到 PDF 的自动化转换。无论是简单的格式转换,还是复杂的页面定制,该库都能提供稳定的支持。掌握上述三种场景的代码模式,即可应对绝大多数办公文档处理需求。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online