3 天搞定 Python 自动化办公实战:从 0 到 1 开发「Excel+PDF + 邮件」全能工具,附完整源码 & 避坑指南
作为程序员,你是否还在重复做这些事?—— 每天花 2 小时复制粘贴 Excel 数据、手动将 100 + 份报表转成 PDF、逐个给客户发带附件的邮件…… 这些机械操作不仅浪费时间,还容易出错。
今天就带大家用 Python 开发一个自动化办公全能工具,一次性解决 Excel 处理、PDF 转换、自动发邮件三大痛点。全程实战,代码逐行注释,新手也能跟着做,最后还会教大家怎么把工具打包成 exe,发给同事直接用!
一、项目为什么值得学?(3 个核心优势)
- 实用性拉满:不做 “玩具项目”,解决职场真实需求,学会后当天就能用在工作里,帮你每天节省 2 小时 +
- 技术门槛低:只用 Python 基础语法 + 3 个常用库(openpyxl、PyPDF2、smtplib),无需复杂框架
- 成果可落地:最终产出可直接运行的 exe 工具,还能自定义修改需求,放在简历 / 作品集里超加分
二、准备工作:10 分钟搞定环境搭建
1. 安装必备库
打开 CMD,复制以下命令执行(建议用 Python 3.8 + 版本,兼容性更好):
# 处理Excel表格
pip install openpyxl
# 处理PDF文件
pip install PyPDF2
# 发送邮件(内置库,无需安装)
# 打包exe工具(最后一步用)
pip install pyinstaller
2. 明确项目功能模块
我们的工具包含 3 个核心功能,按 “简单→复杂” 顺序开发,逐步推进:
- 模块 1:Excel 自动化(数据筛选、批量计算、生成报表)
- 模块 2:PDF 批量处理(Excel 转 PDF、多 PDF 合并、添加水印)
- 模块 3:自动发邮件(读取 Excel 中的收件人,批量发送带附件的邮件)
三、模块 1:Excel 自动化(1 小时搞定)
需求场景
假设有一份 “员工销售数据.xlsx”,需要完成 3 件事:
- 筛选出 “销售额> 50000” 的员工
- 计算每位员工的 “提成”(销售额 * 0.05)
- 将结果保存到新的 Excel 文件中
完整代码(带注释)
from openpyxl import load_workbook, Workbook
def excel_auto_process(input_path, output_path):
# 1. 加载待处理的Excel文件
wb = load_workbook(input_path)
# 选择第一个工作表(默认Sheet)
ws = wb.active
# 2. 创建新的Excel文件,用于保存结果
new_wb = Workbook()
new_ws = new_wb.active
# 设置新表格的表头
new_ws.append(["姓名", "部门", "销售额", "提成"])
# 3. 遍历原表格数据(跳过表头,从第2行开始)
for row in ws.iter_rows(min_row=2, values_only=True):
name, dept, sales = row[0], row[1], row[2] # 假设前3列是姓名、部门、销售额
# 筛选销售额>50000的员工
if sales > 50000:
commission = sales * 0.05 # 计算提成
# 将数据写入新表格
new_ws.append([name, dept, sales, round(commission, 2)]) # 保留2位小数
# 4. 保存新文件
new_wb.save(output_path)
print(f"Excel处理完成!结果已保存到:{output_path}")
# ------------------- 调用函数 -------------------
if __name__ == "__main__":
# 替换成你的文件路径(建议用相对路径,避免报错)
input_excel = "员工销售数据.xlsx"
output_excel = "高销售额员工报表.xlsx"
excel_auto_process(input_excel, output_excel)
效果演示
-
准备一份 “员工销售数据.xlsx”,格式如下:
| 姓名 | 部门 | 销售额 |
|------|------|--------|
| 张三 | 销售 1 部 | 65000 |
| 李四 | 销售 2 部 | 48000 |
| 王五 | 销售 1 部 | 72000 | -
运行代码后,会生成 “高销售额员工报表.xlsx”,自动筛选出张三、王五,并新增 “提成” 列。
四、模块 2:PDF 批量处理(核心功能,必学!)
场景 1:Excel 转 PDF(无需手动打开 Excel 导出)
很多时候需要将 Excel 报表转成 PDF 发给客户,用代码实现批量转换:
from openpyxl import load_workbook
from win32com.client import DispatchEx # 需安装pywin32:pip install pywin32
def excel_to_pdf(excel_path, pdf_path):
# 初始化Excel应用(后台运行,不显示界面)
excel = DispatchEx("Excel.Application")
excel.Visible = False # 隐藏Excel窗口
excel.DisplayAlerts = False # 关闭弹窗提示
try:
# 打开Excel文件
workbook = excel.Workbooks.Open(excel_path)
# 导出为PDF(FileFormat=57对应PDF格式)
workbook.ExportAsFixedFormat(Type=0, Filename=pdf_path, Quality=0)
print(f"Excel转PDF成功!PDF路径:{pdf_path}")
except Exception as e:
print(f"转换失败:{str(e)}")
finally:
# 关闭文件和Excel应用,避免进程残留
workbook.Close(SaveChanges=False)
excel.Quit()
# ------------------- 调用函数 -------------------
excel_to_pdf("高销售额员工报表.xlsx", "高销售额员工报表.pdf")
场景 2:多 PDF 合并(比如把 10 份报表合成 1 份)
from PyPDF2 import PdfMerger
def merge_pdfs(pdf_list, output_pdf):
merger = PdfMerger()
# 遍历所有要合并的PDF文件
for pdf in pdf_list:
merger.append(pdf) # 添加PDF
print(f"已添加:{pdf}")
# 保存合并后的PDF
merger.write(output_pdf)
merger.close()
print(f"PDF合并完成!合并后文件:{output_pdf}")
# ------------------- 调用函数 -------------------
# 要合并的PDF列表(按顺序排列)
pdfs = ["报表1.pdf", "报表2.pdf", "报表3.pdf"]
merge_pdfs(pdfs, "合并后的总报表.pdf")
五、模块 3:自动发邮件(批量给客户发报表)
需求场景
从 Excel 中读取 “客户邮箱” 和 “对应的 PDF 报表名”,自动发送带附件的邮件,邮件内容可自定义。
完整代码
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from openpyxl import load_workbook
def send_auto_email(smtp_server, smtp_port, sender_email, sender_password, excel_path):
# 1. 加载Excel中的客户信息(假设列:客户姓名、客户邮箱、PDF附件路径)
wb = load_workbook(excel_path)
ws = wb.active
# 2. 连接邮件服务器(以QQ邮箱为例,其他邮箱需改服务器和端口)
try:
server = smtplib.SMTP_SSL(smtp_server, smtp_port) # SSL加密连接
server.login(sender_email, sender_password) # 登录邮箱(密码用“授权码”,不是登录密码!)
print("邮箱登录成功!")
except Exception as e:
print(f"邮箱登录失败:{str(e)}")
return
# 3. 遍历客户信息,逐个发送邮件
for row in ws.iter_rows(min_row=2, values_only=True):
client_name, client_email, pdf_path = row[0], row[1], row[2]
if not (client_name and client_email and pdf_path):
print("跳过空数据行")
continue
# 4. 构造邮件内容
msg = MIMEMultipart()
msg["From"] = sender_email # 发件人
msg["To"] = client_email # 收件人
msg["Subject"] = f"【{client_name}】您的月度销售报表已发送" # 邮件主题
# 邮件正文(支持HTML格式,可自定义内容)
body = f"""
<p>您好,{client_name}!</p>
<p>这是您本月的销售报表,已附在邮件中,请查收。</p>
<p>如有疑问,请随时联系我~</p>
"""
msg.attach(MIMEText(body, "html", "utf-8"))
# 5. 添加PDF附件
try:
with open(pdf_path, "rb") as f:
pdf_attach = MIMEApplication(f.read(), _subtype="pdf")
# 设置附件名(显示给收件人的名称)
pdf_attach.add_header("Content-Disposition", "attachment", filename=pdf_path.split("\\")[-1])
msg.attach(pdf_attach)
except Exception as e:
print(f"添加附件失败({client_name}):{str(e)}")
continue
# 6. 发送邮件
try:
server.sendmail(sender_email, client_email, msg.as_string())
print(f"邮件发送成功!收件人:{client_email}")
except Exception as e:
print(f"邮件发送失败({client_email}):{str(e)}")
# 7. 关闭邮件服务器
server.quit()
print("所有邮件处理完成!")
# ------------------- 调用函数(关键参数要改!) -------------------
if __name__ == "__main__":
# 1. 邮件服务器配置(以QQ邮箱为例,其他邮箱参考下表)
SMTP_SERVER = "smtp.qq.com" # QQ邮箱SMTP服务器
SMTP_PORT = 465 # QQ邮箱SSL端口
SENDER_EMAIL = "你的QQ邮箱@qq.com" # 你的发件邮箱
# 注意:这里用“邮箱授权码”,不是QQ密码!获取方式:QQ邮箱→设置→账户→开启POP3/SMTP→生成授权码
SENDER_PASSWORD = "你的QQ邮箱授权码"
# 2. 客户信息Excel路径(格式:客户姓名、客户邮箱、PDF附件路径)
CLIENT_EXCEL = "客户邮箱列表.xlsx"
# 3. 发送邮件
send_auto_email(SMTP_SERVER, SMTP_PORT, SENDER_EMAIL, SENDER_PASSWORD, CLIENT_EXCEL)
常见邮箱配置表(避免踩坑)
| 邮箱类型 | SMTP 服务器 | SMTP 端口(SSL) | 授权码获取方式 |
|---|---|---|---|
| QQ 邮箱 | smtp.qq.com | 465 | 邮箱设置→账户→开启 POP3/SMTP |
| 163 邮箱 | smtp.163.com | 465 | 设置→POP3/SMTP→开启→生成授权码 |
| 企业微信邮箱 | smtp.exmail.qq.com | 465 | 管理后台→安全→开启 SMTP |
六、最后一步:打包成 exe,发给同事直接用
写好的代码,非程序员同事不会装 Python 环境?没关系,用 pyinstaller 打包成 exe,双击就能运行!
打包步骤(1 分钟搞定)
- 把所有代码整合到一个文件中(比如命名为 “auto_office_tool.py”)
- 打开 CMD,进入代码所在文件夹,执行以下命令:
# -F:打包成单个exe文件;-i:给exe加图标(可选,图标文件需是.ico格式)
pyinstaller -F -i tool.ico auto_office_tool.py
- 打包完成后,在 “dist” 文件夹中找到 exe 文件,双击运行即可。
七、项目扩展建议(让你的工具更强大)
- 加 “图形界面”:用 tkinter 或 PyQt 做一个简单界面,不用改代码就能选文件、点按钮运行
- 加 “日志功能”:记录每一步操作结果,出错了能定位问题
- 支持 “多格式文件”:比如 Word 转 PDF、CSV 文件处理
- 定时任务:用 schedule 库设置每天自动运行,比如早上 8 点自动发报表
八、源码获取
本文所有代码已整理成压缩包,包含:
- 完整源码(带注释)
- 测试用 Excel/PDF 文件
- 图标文件(用于打包 exe)
- 详细操作手册
关注我的 CSDN 账号,私信回复 “自动化办公工具” 即可获取!
如果在实操中遇到问题,欢迎在评论区留言,我会逐一回复。觉得有用的话,别忘了点赞 + 收藏,后续还会更新更多 Python 实战项目~
更多推荐

所有评论(0)