非常实用的问题 👍

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 样式。

🔍 总结对比表:

方法依赖环境格式保真度是否跨平台适用场景
🥇 win32comWindows + Excel⭐⭐⭐⭐⭐办公环境、Excel原生导出
🥈 xlsx2pdfPython⭐⭐⭐跨平台批量转换
🥉 openpyxl + reportlabPython⭐⭐自定义PDF格式/报表生成

是否希望我帮你写一个「自动遍历文件夹内所有 Excel → PDF 批量转换脚本」?这在办公场景非常实用(支持多表格批量导出)。