
10年青少年编程教育经验 | 资深Python专家
前大厂技术总监 | 现编程教育创业者
专注青少年编程教育技能提升

大家好,我是浩浩学编程的方老师,这是excel办公自动化系列的第22课。
今日技能
📱 一文给大家快速掌握python的另一个能力:文件转换-xlsx to pdf
你有没有经历过这样的崩溃时刻——
老板发来一个文件夹,里面 50 个 Excel 报表,要求全部转成 PDF 发给客户。
你只能:打开 Excel → 文件 → 另存为 → 选 PDF → 确认……重复 50 次。
今天教你用 10 行 Python 代码,批量完成这个任务。零基础也能学会
在日常工作中,Excel 转 PDF 几乎是"刚需操作":
📊 财务报表:月度/季度报表需要以 PDF 格式对外发送,防止数据被篡改
📋 合同附件:报价单、对账单需要以"不可修改"的格式归档
📧 邮件发送:大部分客户更习惯收到 PDF 而非 Excel
📁 合规归档:很多公司要求所有对外文件统一为 PDF 格式
手动操作一次没问题,但当你面对 几十甚至上百个文件 时,手动操作就变成了体力劳动。
好消息是:Python 可以帮你把这件苦差事变成"一键操作"。
这里方老师推荐一种windows平台比较合适的方式, win32com 方案,这个方案不太需要额外的工具,只要有python和excel就行。
一、动手前的准备工作(只需 2 分钟)
第 1 步:确认你的环境
✅ Windows 系统
✅ 已安装 Microsoft Excel(WPS 不行)
✅ 已安装 Python(没有的话去 python.org 下载安装)
第 2 步:安装一个库
打开命令行(Win + R → 输入 cmd → 回车),输入:
pip install pywin32就这一步,搞定。
第 3 步:准备测试文件
在你的电脑上创建一个文件夹,比如 D:\待转换,里面放几个 .xlsx 文件用于测试。
二、核心代码:10 行搞定单个文件转换
先从最简单的开始
—— 把 一个 Excel 文件转成 PDF:
import win32com.clientimport osdef excel_to_pdf(excel_path, pdf_path):"""将单个 Excel 文件转换为 PDF"""excel = win32com.client.Dispatch("Excel.Application")excel.Visible = False# 不显示 Excel 窗口(后台静默运行)excel.DisplayAlerts = False# 关闭弹窗提示# 打开工作簿wb = excel.Workbooks.Open(os.path.abspath(excel_path))# 导出为 PDF(0 代表整个工作簿,1 代表当前工作表)wb.ExportAsFixedFormat(0, os.path.abspath(pdf_path))# 关闭工作簿,退出 Excelwb.Close(False)excel.Quit()# 使用示例excel_to_pdf("D:\\待转换\\月度报表.xlsx","D:\\待转换\\月度报表.pdf")print("转换完成!")
代码解读:
Dispatch("Excel.Application"): 启动 Excel 程序,相当于双击打开 Excel
Visible = False:隐藏窗口,在后台悄悄干活,不弹窗
DisplayAlerts = False:关闭警告,不会弹出"是否保存"之类的提示
Workbooks.Open(...): 打开文件,相当于在 Excel 里点"打开"
ExportAsFixedFormat(0, ...):导出 PDF,相当于"另存为 PDF",0=整个工作簿
wb.Close(False):关闭不保存,关掉文件,不保存修改
excel.Quit():退出 Excel,关闭 Excel 程序
那一个都会了,50个也不远了。
三、批量转换:加上循环,50 个文件也是一键的事
单个文件能转了,批量转换只需要加一个 for 循环:
import win32com.clientimport osimport globdef batch_excel_to_pdf(input_folder, output_folder):"""批量将文件夹中的所有 Excel 文件转换为 PDF参数:input_folder : 存放 Excel 文件的文件夹路径output_folder : PDF 输出文件夹路径"""# 如果输出文件夹不存在,自动创建os.makedirs(output_folder, exist_ok=True)# 找到文件夹中所有 .xlsx 和 .xls 文件excel_files = glob.glob(os.path.join(input_folder, "*.xlsx"))excel_files += glob.glob(os.path.join(input_folder, "*.xls"))if not excel_files:print("没有找到 Excel 文件!")returnprint(f"共找到 {len(excel_files)} 个 Excel 文件,开始转换...")# 启动 Excel(只启动一次,提高效率)excel = win32com.client.Dispatch("Excel.Application")excel.Visible = Falseexcel.DisplayAlerts = Falsesuccess_count = 0fail_count = 0for i, excel_path in enumerate(excel_files, 1):try:# 获取文件名(不含扩展名),用于生成 PDF 文件名filename = os.path.splitext(os.path.basename(excel_path))[0]pdf_path = os.path.join(output_folder, f"{filename}.pdf")# 打开 → 导出 → 关闭wb = excel.Workbooks.Open(os.path.abspath(excel_path))wb.ExportAsFixedFormat(0, os.path.abspath(pdf_path))wb.Close(False)success_count += 1print(f" [{i}/{len(excel_files)}] ✅ {filename}")except Exception as e:fail_count += 1print(f" [{i}/{len(excel_files)}] ❌ {os.path.basename(excel_path)} - 失败: {e}")# 退出 Excelexcel.Quit()print(f"\n转换完成!成功 {success_count} 个,失败 {fail_count} 个")print(f"PDF 文件已保存到:{output_folder}")# 使用示例batch_excel_to_pdf("D:\\待转换", "D:\\已转换PDF")
运行效果
共找到 12 个 Excel 文件,开始转换...[1/12] ✅ 1月销售报表[2/12] ✅ 2月销售报表[3/12] ✅ 3月销售报表[4/12] ✅ 客户对账单[5/12] ✅ 季度汇总表...[12/12] ✅ 年度分析报告转换完成!成功 12 个,失败 0 个PDF 文件已保存到:D:\已转换PDF
划重点:注意这里 Excel 只启动和退出了一次,所有文件共用同一个 Excel 进程。这比每个文件都重新打开 Excel 快得多——50 个文件可能只需要 30 秒。
四、总结
一句话总结:让 Python 帮你做重复的事,把时间留给更有价值的工作。
觉得有用?点赞收藏,下次老板再让你批量转 PDF,直接掏出这篇文章!
有问题欢迎留言讨论,我会一一解答 👇
🎉 同学们,看到这里,你学会了吗!
方老师说: 🚀 现在屏幕前的你已经比90%的同龄人领先一步了!
接下来可以:
介绍一下用pandas批量格式转换(Excel转PDF)的进阶
(下期教程教!)
⚠️ 遇到问题?评论区甩截图,方老师尽量在24小时内回复!
夜雨聆风