乐于分享
好东西不私藏

【从零开始学excel办公自动化】50 个 Excel 文件要转 PDF?别一个个打开了!Python 一键搞定

【从零开始学excel办公自动化】50 个 Excel 文件要转 PDF?别一个个打开了!Python 一键搞定
#办公自动化 #从零开始学 #pandas #excel #if

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))    # 关闭工作簿,退出 Excel    wb.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 文件!")        return    print(f"共找到 {len(excel_files)} 个 Excel 文件,开始转换...")    # 启动 Excel(只启动一次,提高效率)    excel = win32com.client.Dispatch("Excel.Application")    excel.Visible = False    excel.DisplayAlerts = False    success_count = 0    fail_count = 0    for 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 += 1            print(f"  [{i}/{len(excel_files)}] ✅ {filename}")        except Exception as e:            fail_count += 1            print(f"  [{i}/{len(excel_files)}] ❌ {os.path.basename(excel_path)} - 失败: {e}")    # 退出 Excel    excel.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小时内回复

#python #Pandas #数据分析 #浩浩学编程 #职场技能 #excel #pdf