你有没有过这种时刻——月底要汇总 300 张区域销售表,复制、粘贴、对格式,一抬头已经凌晨一点?其实,用 Python 批量处理 Excel,这套活儿 1 分钟就能跑完,你喝口水的功夫结果就出来了。
我见过太多人,电脑里明明装了 Python,却还在用鼠标一格一格拖。不是学不会,是没人告诉你"原来还能这么干"。
今天这篇,我把压箱底的几段脚本掏出来。你不用懂原理,也能先跑起来——先把代码复制过去,看到结果,兴趣自然就来了。再往下看,我讲清楚每一行为什么这么写。
配套代码关注后回复「实战01」领取,省得你对着屏幕手敲。
关键要点先记住这 5 个能直接用的招(文末都能领代码):
- 用 openpyxl 库,3 行代码就能读取任意 Excel,本机不需要装 Office
- 批量改单元格:一个 for 循环给几百行数据统一打 9 折,1 秒完成
- 批量汇总多表:文件夹里 300 张表,合并成 1 张总表,代码不到 15 行
- 给 10 个部门各发一张月报模板?循环一遍,自动生成。
- 全套 10 个脚本,关注后回复「实战01-excel」打包领走,复制就能跑
一、先装好"扳手":环境准备
我们用的库叫 openpyxl。它是专门读写 Excel(.xlsx 格式)的 Python 工具,免费、开源。
它还不依赖本机装没装 Office——你电脑上哪怕没买微软全家桶,照样能读能写。打开命令行(Windows 叫"命令提示符",Mac 叫"终端"),输入这一行:
回车,等它跑完。看到屏幕最后一行出现 "Successfully installed openpyxl" 这几个字,就成功了。
小贴士:如果提示 "pip 不是内部命令" 或者 "command not found",说明你还没装 Python,或者安装时没勾选"Add Python to PATH"。去 python.org 下载最新版,安装时务必把那个勾打上,装完再回来试一次。
装好它,后面读、改、汇总、新建全都不用碰鼠标。很多新手以为难,其实就是卡在少装了这一个库——这一步走完,门就开了。
二、Python 读取 Excel 数据:先看清楚表里有什么
库装好了,咱先练"读"。想批量改 500 行?总得先让 Python 看见这 500 行吧——读出来,后面才好下手。
看一段最基础的读取代码:
from openpyxl import load_workbook# 打开工作簿(把文件名换成你自己的)wb = load_workbook("销售表.xlsx")# 看看里面有几张工作表print(wb.sheetnames)# 取第一张表(active 就是当前打开的那张)ws = wb.active# 打印总行数、总列数print("共", ws.max_row, "行", ws.max_column, "列")# 读单个单元格print("A1 的内容是:", ws["A1"].value)# 按"第几行第几列"读(行、列都从 1 开始,不是 0)print("第 2 行第 1 列:", ws.cell(row=2, column=1).value)
把代码里的 "销售表.xlsx" 换成你桌面上随便一张表,运行一下。屏幕上会打印出表名、行列数,还有具体单元格的内容。
此处放一张运行结果截图:终端窗口里打印出 ['Sheet1']、总行数与总列数(比如 共 100 行 3 列)、以及 A1、第 2 行第 1 列的具体数值,证明数据已被成功读取。
上面这几行,就是『读 Excel』的全部基本功。重点记一个坑:cell(row,column) 行和列都从 1 数起,别习惯性写 0。
三、Python 批量处理 Excel:批量改单元格
真实场景来了。假设你有一张价格表,B 列是原价,老板一句"全部打 9 折"。手动改 500 行?眼睛都花了,还容易改错行。
看这段代码:
from openpyxl import load_workbookwb = load_workbook("价格表.xlsx")ws = wb.activefor row in range(2, ws.max_row + 1): price = ws.cell(row=row, column=2).value # 读 B 列价格 if isinstance(price, (int, float)): # 确认是数字再算,跳过标题和空值 ws.cell(row=row, column=2).value = round(price * 0.9, 2)wb.save("价格表_打折后.xlsx")
跑完,你就多了一个 "价格表_打折后.xlsx",所有价格都已经打过折。原文件一个字没动——这是个好习惯,永远保存成新文件,改错了还有退路。
此处放一张运行结果截图:左边原表 B 列是 100、200、300,右边新表对应变成 90、180、270,旁注"运行前后对比",证明批量修改成功。
for 循环一遍,重复劳动就成了电脑的事。同一招你能给 500 人批量加『部门编码』、改手机号格式、把『元』换成『万元』——换的只是列号和公式。
迷你故事:HR 小王的"摸鱼"下午
小王是 HR,上周老板让他给 480 份简历 Excel 批量加一列"初筛状态:待筛"。他本来准备花一下午,边填边叹气。
我看他愁眉苦脸,就发了那段"批量改单元格"的代码,把列号从 2 改成目标列,加一列写死"待筛"两个字。他跑完,喝着奶茶跟我说:"原来这就叫 Python 批量处理 Excel 啊,我之前以为多难。"
现在他成了部门里的"技术担当",其实就是会了这几招。
觉得有用?点【关注】,下一篇教你把数据直接变成 Word 报告。 同一套数据,不用再手动排版。
四、批量汇总多表:300 张表 → 1 张总表
这是最香的一招。你文件夹里有一堆 Excel,格式一模一样,只想把它们的内容合并到一张总表里。手动打开、复制、粘贴 300 次?别了,看代码:
import osfrom openpyxl import load_workbook, Workbookfolder = "每月销售" # 放所有 Excel 的文件夹名result = Workbook()ws_out = result.activews_out.append(["月份", "销售员", "金额"]) # 先写表头for file in os.listdir(folder): if file.endswith(".xlsx"): path = os.path.join(folder, file) wb = load_workbook(path, data_only=True) ws = wb.active for row in ws.iter_rows(min_row=2, values_only=True): ws_out.append(row) # 把每张表的数据,逐行追加到总表result.save("销售汇总.xlsx")
逻辑拆开看就三步:遍历文件夹 → 逐张打开 → 把数据一行行追加到新建的总表 → 保存。里面的 data_only=True 很关键,它会读"算出来的结果值"而不是公式本身,避免你汇总出一列 =SUM(...)。
迷你故事:小李的"解放之夜"
说个真事。我朋友小李,在一家连锁餐饮做运营,每月要汇总 300 张门店销售表。
以前他周五下班就开始干,复制粘贴、VLOOKUP、对格式,经常熬到半夜,女朋友打电话催都不接。
上个月我给他这段汇总代码,他半信半疑试了下。300 张表,点一下运行,1 分钟出一张总表。他当场给我发了条语音:"卧槽,我今晚能准时下班了。"
后来他跟我说,光这一招,每月省下至少 6 个小时。这 6 小时,他拿来研究下一步自动化——现在的他,已经会自己写脚本了。
迷你故事:财务张姐的月底噩梦
张姐是我们公司的财务,每月 1 号最怕收各分公司的表。12 个分公司,每个发来一张 Excel,她要把 12 张拼成一张,再算汇总交集团。
有次她发烧还硬撑着做这个,因为 3 号要交。我顺手把上面那段代码改了改,文件夹名换成她的路径,跑了一下。12 张变 1 张,还顺便用同一个库加了合计行。
她后来在部门群里发了 88.88 的红包,备注"感谢 IT 小李同志"。其实小李就是用了这 15 行代码。
五、批量生成新表:给每个部门发一张模板
反过来,你有一份名单,要给每个对象生成一张结构一样的空表。比如 10 个部门,各来一张"月报模板",表头都一样,就名字不同。
看代码:
from openpyxl import Workbookdepartments = ["销售部", "市场部", "技术部", "人事部", "财务部"]for dept in departments: wb = Workbook() ws = wb.active ws.title = dept ws.append(["姓名", "本月业绩", "备注"]) ws.append(["(待填)", 0, ""]) wb.save(f"{dept}_月报模板.xlsx")
跑完,文件夹里多出来 5 个文件:销售部_月报模板.xlsx、市场部_月报模板.xlsx……每个都填好了表头,发给对应部门填就行。
此处放一张运行结果截图:文件夹里并排出现 5 个以部门命名的 xlsx 文件,打开任意一个可见预设的表头"姓名 / 本月业绩 / 备注"和一行示例数据。
这招反过来也好用:一张大成绩表,按"班级"列拆成 N 张小表,发给对应班主任——本质就是"先按列分组,再分别保存",思路和第三节一脉相承。
六、3 个真实职场场景,对号入座
代码看完了,下面这几种情况,你是哪一种?
场景 1:销售拆分与汇总(小李的就是这种)。 300 张门店表合并成总表(第四节),或者一张总表按区域拆给各区负责人(第三节逆向操作)。省时:手动 2 天 → 自动 1 分钟。考勤表、业绩表,套路一模一样。
场景 2:HR / 行政,批量改花名册(小王的就是这种)。 500 人信息表,给所有人加一列"部门编码",或统一把手机号中间四位打码。省时:手动 1 小时 → 自动 5 秒。
场景 3:财务 / 老师,按类别拆分总表(张姐的就是这种)。 一张大表,按"分公司 / 班级"列拆成 N 张小表,分别发给对应负责人。省时:手动半天 → 自动 2 分钟。
不管你是哪种,核心套路就一句话:用 for 循环把"重复操作"包起来,让 Python 替你点鼠标。
你上班是来解决问题的,不是来当人肉复制粘贴机的。
七、下一步:数据整理好了,报告怎么自动出?
表汇总完了,老板要的是报告,不是一张大表。下一篇我教你 Python 自动生成 Word 报告——把刚才汇总的数据,直接套模板生成 20 份周报,10 分钟搞定,连排版都帮你做好。
用 Python 批量处理 Excel 省下的时间,够你做更多正事——而不是耗在复制粘贴上。
如果今天的脚本帮你省了 1 小时,点【关注】,下周教你把它做成定时自动跑——到点自己跑,结果自动发你邮箱,你连点运行的功夫都不用花。
回复「实战01」领 10 个可直接跑的脚本,Excel 批量处理全套都打包在里面了,复制就能用。
如果这篇帮你省了时间,转发给也在学 Python 的朋友,一起少走弯路。
- openpyxl 官方文档:https://openpyxl.readthedocs.io/en/stable/(中文版:https://openpyxl-chinese-docs.readthedocs.io/zh-cn/latest/)
- Python 官方文档中文版:https://docs.python.org/zh-cn/3/
- Real Python · openpyxl 教程:https://realpython.com/openpyxl-excel-spreadheets-python/