如何使用Python将Excel指定工作表批量转换为PDF
Excel指定工作表转PDF实现方案
推荐依赖库
优先选择pywin32(Windows环境),调用本地Microsoft Excel原生接口导出PDF,可100%保留原文件样式,无需额外处理排版规则。
如果需要跨平台(Linux/macOS)运行,可选择调用LibreOffice命令行接口实现,无需依赖微软Office。
具体实现逻辑
- 第一步:遍历目标目录下的所有待处理Excel文件,匹配每个文件对应的待导出工作表
- 第二步:调用Excel打开目标文件,根据传入的待转换工作表名选中对应工作表
- 第三步:调用原生导出方法输出PDF,按「原文件名_工作表名.pdf」的规则命名输出文件
- 第四步:关闭文件、退出Excel进程,避免后台残留冗余进程
完整代码示例(Windows环境)
首先安装依赖:
pip install pywin32 xlrd
实现代码:
import os import xlrd import win32com.client as win32 from win32com.client import constants # 配置参数 input_dir = "你的Excel文件所在目录路径" # 可直接对接你现有逻辑获取的文件与待导出工作表映射关系 file_sheet_map = { "file1.xls": ["Title"], "file2.xls": ["Contents"], "file3.xls": ["Summary"] } # 初始化Excel应用 excel = win32.gencache.EnsureDispatch('Excel.Application') # 设为后台运行,不弹出窗口 excel.Visible = False excel.DisplayAlerts = False try: for filename, required_sheets in file_sheet_map.items(): file_path = os.path.join(input_dir, filename) if not os.path.exists(file_path): continue # 打开Excel工作簿 wb = excel.Workbooks.Open(os.path.abspath(file_path)) # 遍历待转换的工作表列表,直接对接你获取到的RequiredSheet参数即可 for sheet_name in required_sheets: # 校验工作表是否存在 if sheet_name not in [sh.Name for sh in wb.Worksheets]: continue # 选中目标工作表 ws = wb.Worksheets(sheet_name) # 生成输出PDF路径 pdf_name = f"{os.path.splitext(filename)[0]}_{sheet_name}.pdf" pdf_path = os.path.join(input_dir, pdf_name) # 导出为PDF ws.ExportAsFixedFormat(Type=constants.xlTypePDF, Filename=os.path.abspath(pdf_path)) # 关闭当前工作簿,不保存修改 wb.Close(SaveChanges=False) finally: # 强制退出Excel进程,避免后台残留 excel.Quit() # 释放COM对象 del excel
跨平台实现说明
如果需要在非Windows环境运行,可安装LibreOffice后,通过Python调用子进程执行转换命令,示例命令如下:
libreoffice --headless --convert-to pdf --outdir 输出目录路径 --worksheet 工作表名 输入Excel文件路径
使用subprocess模块调用上述命令即可完成转换,适配规则和文件名逻辑可复用上面的实现。
内容的提问来源于stack exchange,提问作者Python
相关产品推荐
相关产品推荐

