Python 自动化办公完全指南:30行代码告别Excel/Word/PDF重复劳动
你有没有这种经历——每个月最后三天,被领导扔…
你有没有这种经历——每个月最后三天,被领导扔过来几十个Excel报表,要求”汇总一下”;或者下周要发30份合同,你还在手动复制粘贴改名字和金额,改到眼花缭乱,一不小心把张总的工资填到李总头上。
别问我怎么知道的,我当年在公司做财务助理的时候,每个月25号到月底就是噩梦。直到我用Python把这套流程全部自动化了,原来需要两天的活,现在跑个脚本,泡杯咖啡的功夫搞定。
今天不扯虚的,直接上干货:用Python把Excel、Word、PDF这三座大山一次铲平。全程真实代码,复制就能用。
一、环境准备:装好这三个库就够了
别被”Python”两个字吓到。你不需要成为程序员,只要会装软件、会复制粘贴就行。
1.1 安装Python
去python.org下载最新版(建议3.10+),安装时记得勾选 “Add Python to PATH”。装完在命令行验证:
python --version
# 输出: Python 3.x.x
1.2 安装必备库
打开命令行(CMD或终端),一行命令安装全部:
pip install openpyxl python-docx PyPDF2
三个库各自负责什么:
| 库名 | 用途 | 支持格式 |
|---|---|---|
| openpyxl | 读写Excel(.xlsx) | 数据、公式、图表、样式 |
| python-docx | 读写Word(.docx) | 段落、表格、页眉页脚 |
| PyPDF2 | 操作PDF | 合并、拆分、提取文字 |
一句话结论:装这三个你就覆盖了95%的办公自动化场景。不需要装什么巨型的Pandas或NumPy,除非你要搞数据分析。
二、Excel自动化:批量合并、筛选、报表生成
场景1:把文件夹里所有Excel合并成一个
我最常遇到的情况是:各个部门发来的日报/周报,格式一模一样,要汇总成一张总表。以前我得一个一个打开复制粘贴,30个文件能干一上午。
现在用这个脚本:
import openpyxl, os, glob
# 要合并的所有Excel文件
files = glob.glob("报表文件夹/*.xlsx")
output_wb = openpyxl.Workbook()
output_ws = output_wb.active
output_ws.title = "汇总"
first_file = True
for f in files:
wb = openpyxl.load_workbook(f)
ws = wb.active
for row in ws.iter_rows(values_only=True):
# 从第二个文件开始跳过表头
if first_file:
output_ws.append(row)
else:
output_ws.append(row)
wb.close()
first_file = False
output_wb.save("汇总结果.xlsx")
output_wb.close()
print(f"合并完成!共处理 {len(files)} 个文件")
就12行代码,把30个文件合并成一个。我第一次跑通的时候坐在工位上笑了半天——之前两天的工作量,变成3秒出结果。
场景2:按条件筛选并生成新表
假设你有一份全国销售数据,想按”华南区”单独拉一张表发给负责人:
import openpyxl
wb = openpyxl.load_workbook("销售数据.xlsx")
ws = wb.active
new_wb = openpyxl.Workbook()
new_ws = new_wb.active
for row in ws.iter_rows(values_only=True):
if row[0] == "华南区": # 假设A列是区域
new_ws.append(row)
new_wb.save("华南区销售数据.xlsx")
new_wb.close()
wb.close()
改一下条件判断,就能变成”销售额大于100万”、”日期在本月”、”客户等级为VIP”——你想怎么筛就怎么筛,5行代码搞定。
三、Word自动化:批量生成合同/通知/信函
场景:给30个客户发续费通知,每人名字、金额、日期不一样
手工做法:复制粘贴改内容 → 打印 → 30份干一天。
Python做法:先准备一个模板文件,把要替换的地方用{变量名}标记,然后跑脚本替换。
模板Word里写:
尊敬的 {客户名称}:
您的服务合同将于 {到期日期} 到期,续费金额为 {金额} 元。
请于 {截止日期} 前完成续费,以免影响正常使用。
然后运行这个脚本:
from docx import Document
import pandas as pd # 需要pip install pandas
# 客户信息表(也可以用Excel/CSV)
客户列表 = [
{"客户名称": "张三", "到期日期": "2026-08-15", "金额": 299, "截止日期": "2026-08-01"},
{"客户名称": "李四", "到期日期": "2026-08-20", "金额": 499, "截止日期": "2026-08-05"},
{"客户名称": "王五", "到期日期": "2026-09-01", "金额": 199, "截止日期": "2026-08-15"},
]
for 客户 in 客户列表:
doc = Document("续费通知模板.docx")
for p in doc.paragraphs:
for key, val in 客户.items():
if f"{{{key}}}" in p.text:
p.text = p.text.replace(f"{{{key}}}", str(val))
doc.save(f"续费通知-{客户['客户名称']}.docx")
print(f"已生成:续费通知-{客户['客户名称']}.docx")
跑完你会发现桌面上多了30个Word文件,每个对应一个客户,名字金额全对。从半小时缩到3秒。
四、PDF操作:合并、拆分、提取不想用付费软件
PDF是办公中最烦人的格式。很多在线工具要上传服务器,隐私问题谁说得清?本地Python一把梭:
合并多个PDF
from PyPDF2 import PdfMerger
import glob
merger = PdfMerger()
for pdf in glob.glob("素材/*.pdf"):
merger.append(pdf)
merger.write("合并结果.pdf")
merger.close()
print("PDF合并完成!")
提取PDF中所有文字
from PyPDF2 import PdfReader
reader = PdfReader("合同文件.pdf")
text = ""
for page in reader.pages:
text += page.extract_text()
with open("合同文字版.txt", "w", encoding="utf-8") as f:
f.write(text)
print(f"提取完成,共 {len(reader.pages)} 页")
这些操作如果用Adobe Acrobat,一年订阅费上千。用Python一分钱不花,而且不经过任何第三方服务器,数据安全拉满。
五、踩坑与避坑指南
坑1:Excel 格式乱掉
openpyxl写入时不会自动保留源文件的格式。如果对格式有要求(比如合并单元格、条件格式),建议先把数据整理好,用模板Excel写入,而不是从零创建。
坑2:Word模板替换时变量名被拆分
Word在保存时会把{变量名}拆到不同的XML段落元素里。如果替换不生效,试试把模板变量单独放一行,不要和其他文字混在一起。
坑3:PyPDF2 对扫描件PDF无效
PyPDF2只能提取文字型PDF的内容。如果是扫描件(图片式PDF),需要OCR工具配合,比如 Tesseract OCR + pdf2image。这个我下次专门写一篇。
坑4:文件路径含中文报错
Windows下中文路径偶尔报编码错误。建议:所有文件路径用英文命名,或者脚本开头加 # -*- coding: utf-8 -*-。
六、总结:30行代码改变你的办公方式
上面所有脚本的核心代码加起来不超过30行。但就是这30行代码,能把一个职场人每月从几十小时的重复劳动里解放出来。
我的学习路线建议:
- 先玩openpyxl——Excel最常用,入门最简单,见效最快
- 再学python-docx——生成报告、合同、批量通知,实用场景多
- 最后攻克PyPDF2——PDF操作是刚需,但坑多一点
先把上面这几段代码复制到本地跑通,跑通之后你自然会知道自己还需要什么功能。去Google/GitHub搜一搜就能找到现成的代码改一改。
下期预告:WPS和Office其实都支持JSA宏(JavaScript宏),不用装Python也能自动化——这个玩法更轻量,值得关注。
—
本教程来自IT大叔的工具箱,专注VPS评测、办公模板、在线神器、本地AI落地。觉得有用的话,收藏分享给你那个还在手动复制粘贴的同事。
