非常实用的问题 👍
用 Python 把 Excel 工作表(.xlsx / .xls)转换为 PDF 有几种常见方式,下面我为你总结了最稳定的几种方法(从最推荐到可选)👇
✅ 一、最推荐:使用 win32com(Windows 专用)
这是调用 Microsoft Excel 本身 来导出 PDF 的方法,兼容性最好、格式最准确。
📦 安装依赖
pip install pywin32
💻 示例代码
import win32com.client
def excel_to_pdf(excel_path, pdf_path):
    excel = win32com.client.Dispatch("Excel.Application")
    excel.Visible = False  # 不显示Excel界面
    wb = excel.Workbooks.Open(excel_path)
    # 导出为PDF,参数说明:
    # 0: 导出整个工作簿
    # 1: 导出活动工作表
    wb.ExportAsFixedFormat(0, pdf_path)
    wb.Close(False)
    excel.Quit()
excel_to_pdf(r"C:\Users\user\Desktop\demo.xlsx", r"C:\Users\user\Desktop\demo.pdf")
✅ 优点
- 完美保留 Excel 格式、字体、图片等;
 - 支持多个工作表;
 - 稳定可靠。
 
⚠️ 注意
- 仅限 Windows + 已安装 Microsoft Office Excel 的环境;
 - 适合办公自动化脚本。
 
✅ 二、跨平台方案:使用 xlsx2pdf(内部用 openpyxl + reportlab)
如果你没有 Excel 或使用 macOS/Linux,这个方案更通用。
📦 安装
pip install xlsx2pdf
💻 示例代码
from xlsx2pdf import xlsx2pdf
# 将整个Excel文件转换成PDF
xlsx2pdf("demo.xlsx", "output.pdf")
# 或者只转换指定工作表
xlsx2pdf("demo.xlsx", "output.pdf", sheetnames=["Sheet1"])
✅ 优点
- 纯 Python 实现;
 - 支持跨平台;
 - 简单易用。
 
⚠️ 缺点
- 样式支持不如 Excel 原生导出精准;
 - 复杂表格格式可能有轻微偏差。
 
✅ 三、自定义方案(完全控制格式)
使用 openpyxl + reportlab 组合,可以自己读取数据再生成 PDF,适合自定义报表。
📦 安装
pip install openpyxl reportlab
💻 示例代码
from openpyxl import load_workbook
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
def excel_to_pdf_custom(excel_path, pdf_path):
    wb = load_workbook(excel_path)
    sheet = wb.active
    c = canvas.Canvas(pdf_path, pagesize=A4)
    x, y = 50, 800
    for row in sheet.iter_rows(values_only=True):
        text = " | ".join([str(cell) if cell is not None else "" for cell in row])
        c.drawString(x, y, text)
        y -= 20
        if y < 50:
            c.showPage()
            y = 800
    c.save()
excel_to_pdf_custom("demo.xlsx", "demo.pdf")
✅ 优点
- 自由排版;
 - 可自定义字体、样式、表格结构;
 - 跨平台。
 
⚠️ 缺点
- 需要自己设计版面;
 - 不自动保留 Excel 样式。
 
🔍 总结对比表:
| 方法 | 依赖环境 | 格式保真度 | 是否跨平台 | 适用场景 | 
|---|---|---|---|---|
🥇 win32com | Windows + Excel | ⭐⭐⭐⭐⭐ | ❌ | 办公环境、Excel原生导出 | 
🥈 xlsx2pdf | Python | ⭐⭐⭐ | ✅ | 跨平台批量转换 | 
🥉 openpyxl + reportlab | Python | ⭐⭐ | ✅ | 自定义PDF格式/报表生成 | 
是否希望我帮你写一个「自动遍历文件夹内所有 Excel → PDF 批量转换脚本」?这在办公场景非常实用(支持多表格批量导出)。
发表回复