摘要:手工合并100个PDF,对着屏幕逐一点击,眼睛酸到流泪还怕漏了某份;周报要改50份Word,重复替换客户名称、项目数据,Ctrl+C按到手指抽筋;Excel里几十列数据要做图表,拖选、设置格式折腾大半天,结果领导说“换个样式再看看”……
手工合并100个PDF,对着屏幕逐一点击,眼睛酸到流泪还怕漏了某份;周报要改50份Word,重复替换客户名称、项目数据,Ctrl+C按到手指抽筋;Excel里几十列数据要做图表,拖选、设置格式折腾大半天,结果领导说“换个样式再看看”……
别再耗在这些重复活上了!今天教你用Python自动化办公,不用懂复杂编程,3行核心代码就能批量处理文件,从此准时下班不是梦——亲测原本3小时的活,现在5分钟搞定!
先从最磨人的PDF说起。不管是合并合同、提取文字,还是给文件加水印,PyPDF2库3行代码就能破局,先打开命令提示符,敲一行pip install PyPDF2安装,接下来直接上手实操。
之前合并PDF,我总在软件里反复点“添加文件”,100个文件要操作100次,还总怕顺序搞反。现在用Python,连文件夹里的文件都不用手动整理:
from PyPDF2 import PdfMerger
import os # 用来找文件夹里的PDF
merger = PdfMerger
for File in os.listdir("要合并的PDF文件夹"): # 自动遍历文件夹
if file.endswith(".pdf"): # 只挑PDF文件
merger.append(f"要合并的PDF文件夹/{file}") # 核心代码:逐个加进合并器
merger.write("合并后的文件.pdf") # 一键保存
上周我帮同事合并40份项目合同,原本她打算花1小时,我用这段代码跑了10秒就搞定——把要合并的PDF全放进一个文件夹,改下代码里的“文件夹名称”,双击运行就行,连顺序都按文件名排得整整齐齐。
2. 1行代码提取PDF文字,合同关键信息不用手抄
之前看PDF合同,想把“付款日期”“责任条款”抄下来,得边翻边打字,遇到扫描版还得认半天。现在用PyPDF2提取文字,连标点符号都不会错:
from PyPDF2 import PdfReader
with open("合同.pdf", "rb") as f:
pdf = PdfReader(f)
page_text = pdf.pages[2].extract_text # 提取第3页文字(注意:页数从0开始算)
print(page_text[:300]) # 打印前300字,快速找关键信息
我试过用它提取50页的论文摘要,原本复制粘贴要20分钟,现在代码一跑,文字直接弹在屏幕上,复制到Word里就能用。要是想提取全本,把pages[2]改成for page in pdf.pages循环就行,连扫描版PDF(只要不是纯图片)都能扒出文字。
写报告、发通知时,最烦“改一点东西,全文档重弄”。比如给100个客户发邀请函,除了姓名、地址,内容全一样,手动改得改到半夜——但用win32com库,1分钟就能生成100份,先装库:pip install pywin32。
1. 批量生成100份邀请函,姓名自动换
先做个邀请函模板,把要替换的“姓名”留空(比如用[客户姓名]当标记),再准备个Excel,列好100个客户的名字,然后跑代码:
import win32com.client as win32
import pandas as pd # 用来读Excel里的姓名
word = win32.Dispatch("Word.Application")
word.Visible = True # 让Word窗口显示,方便看效果
# 读Excel里的客户姓名
name_list = pd.read_excel("客户名单.xlsx")["姓名"].tolist
for name in name_list:
doc = word.Documents.Open("邀请函模板.docx") # 打开模板
# 替换模板里的[客户姓名]为实际姓名
doc.Content.Find.Execute("[客户姓名]", False, False, False, False, False, True, 1, False, name, 2)
doc.SaveAs(f"邀请函_{name}.docx") # 按姓名保存
doc.Close
word.Quit
上周行政同事要发年会邀请函,300个员工,她原本打算手动改一上午,我用这个代码帮她跑,喝杯咖啡的功夫,300份带名字的邀请函全存在文件夹里了——连文件名都是“邀请函_张三.docx”,不用再手动重命名。
2. 合同里的“公司名”全改?1行代码替换所有
之前公司改名,20份老合同里的“旧公司名”要全换成新的,手动改得逐页找,还怕漏。现在用代码,不管藏在哪个段落,全文档替换:
# 接上面的word对象
doc = word.Documents.Open("老合同.docx")
# 关键代码:找“旧公司名”,换成“新公司名”
doc.Content.Find.Execute("旧公司名", False, False, False, False, False, True, 1, False, "新公司名", 2)
doc.Save # 保存修改
我试过改10页的合同,代码跑2秒就改完了,比用Word自带的“替换”还快——它连页眉页脚里藏的公司名都会找出来,手动替换时我总忘看页眉,用代码就没漏过。
Excel里做报表,最费时间的是“做图表”和“标数据”。比如领导要“把每月销售额做成柱状图,再标红top3的数据”,手动弄要调格式、选数据,现在用代码,2行就出图。
1. 1行代码生成图表,数据变图不用点鼠标
先在Excel里整理好数据(比如A列是“月份”,B列是“销售额”),然后跑代码:
import win32com.client as win32
excel = win32.Dispatch("Excel.Application")
excel.Visible = True # 显示Excel窗口
wb = excel.Workbooks.Open("销售数据.xlsx")
ws = wb.Sheets("Sheet1") # 选数据所在的工作表
# 核心代码:生成柱状图(201是图表类型,51是柱状图)
chart = ws.Shapes.AddChart2(201, 51).Chart
chart.SetSourceData(ws.Range("A1:B13")) # 绑定A1到B13的数据(含表头)
chart.ChartTitle.Text = "2025年每月销售额" # 加图表标题
之前我做季度报表,光调图表颜色、字体就花20分钟,现在代码一跑,图表直接嵌在Excel里,领导说“换折线图”,把51改成4就行(4是折线图代码),不用删了重画。
2. 自动标红最高值,数据异常一眼看见
数据太多时,想快速找到“最高销售额”“最低利润”,手动找费眼,用代码给数据加条件格式:
# 接上面的ws工作表
data_range = ws.Range("B2:B13") # B列是销售额,从第2行到13行
# 给前3名加红色字体
top3 = data_range.FormatConditions.AddTop10
top3.Rank = 3 # 选top3
top3.Font.Color = 0xFF0000 # 红色(RGB代码)
# 给低于平均值的加黄色底色
low_data = data_range.FormatConditions.AddAboveAverage
low_data.AboveBelow = 0 # 0是“低于平均值”
low_data.Interior.Color = 0xFFFF00 # 黄色底色
上次财务同事看销售数据,用这个代码标完,低于平均值的月份全黄了,top3红了,不用再逐行算,一眼就知道哪月要重点分析。
最实用的是“一条龙操作”:从Excel读数据→生成Word报告→转PDF,比如每周的项目周报,原本要复制数据、排版、转格式,现在代码全代劳:
# 1. 从Excel读数据
import pandas as pd
data = pd.read_excel("项目数据.xlsx").iloc[0] # 读第一行数据
# 2. 生成Word报告
import win32com.client as win32
word = win32.Dispatch("Word.Application")
doc = word.Documents.Open("周报模板.docx")
# 替换模板里的[本周进度]、[下周计划]
doc.Content.Find.Execute("[本周进度]", False, False, False, False, False, True, 1, False, data["本周进度"], 2)
doc.Content.Find.Execute("[下周计划]", False, False, False, False, False, True, 1, False, data["下周计划"], 2)
# 3. 转成PDF保存
doc.SaveAs("2025.08.09项目周报.pdf", FileFormat=17) # 17是PDF格式代码
doc.Close
word.Quit
我现在每周五下午用这个代码,10分钟就生成周报PDF,不用再对着Excel复制粘贴,连格式都和模板一样整齐——领导还问我“怎么周报做得越来越快,还没差错?”
互动专区:你的重复活,我教你自动化
挑战任务:
试试用Python批量重命名100个文件!提示:用os.rename,比如把“文件1.pdf”“文件2.pdf”改成“合同1.pdf”“合同2.pdf”,代码框架给你:
import os
for i, file in enumerate(os.listdir("文件夹")):
if file.endswith(".pdf"):
os.rename(f"文件夹/{file}", f"文件夹/合同{i+1}.pdf")
评论区留言:你平时加班最多的重复活是什么?比如“每天要统计10个群的消息”“每周要整理20份报销单”,我会在评论区教你对应的自动化代码!
别让重复劳动耗掉你的时间——这些代码不用背,复制过去改几个文件名、文件夹名就能用。亲测用Python自动化后,我每天少加班2小时,现在连领导都来问我“能不能教他弄”。试试今天的代码,明天准时下班的就是你!
来源:绿叶菜