ARTICLE · 1251333
Python 操作 Excel:把每周 3 小时的重复劳动,压缩成 30 秒
Python 操作 Excel:把每周 3 小时的重复劳动,压缩成 30 秒
每个办公室都有一类人:每周五下午,准时打开七八个 Excel,复制、粘贴、透视、汇总、调格式——2~3 小时的机械劳动,内容固定、步骤固定、下周继续。这一类活,恰恰是 Python 自动化最擅长的领域:读表、合并、计算、汇总、写回、发邮件,全流程 30 秒跑完。
这篇对标的是「完全没写过程序的办公族」和「会点 Python 但没系统用过 openpyxl/pandas 的人」——六个最高频场景,每个给可直接抄的代码模板。读这篇文章不需要编程基础,只需要你会把代码粘进编辑器改几个文件名。
一、装备:两个库,5 分钟装好
pip install pandas openpyxlpandas:数据处理的主力(读表/筛选/汇总/合并/透视)openpyxl:精细控制 Excel 本身(格式/样式/图表/单元格)分工:数据计算用 pandas,颜值和格式用 openpyxl二、场景 1:合并多个 Excel(每月最痛的活)
30 个门店各自交一张表,要合并成一张总表——手工是 30 次复制粘贴:
import pandas as pdfrom pathlib import Pathfolder = Path("门店报表") # 改成你的文件夹名frames = []for file in folder.glob("*.xlsx"): df = pd.read_excel(file) # 逐个读取 df["来源文件"] = file.stem # 记下来自哪张表 frames.append(df)total = pd.concat(frames, ignore_index=True) # 纵向拼接total.to_excel("总表.xlsx", index=False) # 写出print(f"合并完成:{len(frames)} 张表,共 {len(total)} 行")改一个文件夹名就能用——这段模板值回全部学习成本。
三、场景 2:按条件筛选 + 汇总(透视表的代码版)
import pandas as pddf = pd.read_excel("销售明细.xlsx")mask = (df["区域"] == "华东") & (df["金额"] > 1000)result = df[mask]summary = (result.groupby(["区域", "产品"]) .agg(销量=("数量", "sum"), 总金额=("金额", "sum"), 订单数=("订单号", "count")) .reset_index() .sort_values("总金额", ascending=False))summary.to_excel("汇总.xlsx", index=False)groupby + agg 就是透视表的代码版——写一次,每月复用,列名改成你的。
四、场景 3:多表关联(VLOOKUP 的代码版,但更强)
import pandas as pdorders = pd.read_excel("订单.xlsx") # 有一列"客户ID"clients = pd.read_excel("客户名单.xlsx") # 有"客户ID"和"客户等级"merged = orders.merge(clients[["客户ID", "客户等级"]], on="客户ID", how="left")merged["客户等级"] = merged["客户等级"].fillna("未知")merged.to_excel("订单含等级.xlsx", index=False)merge 比 VLOOKUP 强在:百万行不卡死、多列关联一行搞定、找不到不报错只标记。
五、场景 4:格式与美化(openpyxl 登场)
pandas 写出的表是「素颜」的,发给老板前要加个表头底色和列宽:
from openpyxl import load_workbookfrom openpyxl.styles import PatternFill, Font, Alignmentwb = load_workbook("汇总.xlsx")ws = wb.activeheader_fill = PatternFill("solid", fgColor="4472C4")for cell in ws[1]: cell.font = Font(bold=True, color="FFFFFF") cell.fill = header_fill cell.alignment = Alignment(horizontal="center")for column in ws.columns: width = max(len(str(c.value or "")) for c in column) + 4 ws.column_dimensions[column[0].column_letter].width = min(width, 40)wb.save("汇总-美化版.xlsx")六、场景 5:定时自动运行(自动化=无人值守)
手动跑脚本还差一步——让它自己定时跑(Windows 任务计划程序 / Linux cron):
Windows:任务计划程序 → 创建基本任务 → 触发器选「每周五 17:00」 → 操作选「启动程序」→ 程序填 python,参数填脚本路径Linux/Mac:crontab -e 加一行 0 17 * * 5 cd /path/to/scripts && python merge_report.py配上前面的合并+汇总+美化,就是一条每周五下午自动生成、自动格式化的完整流水线——你周报里的数据部分,从此零手工。
七、避坑四条(新手最常撞的墙)
坑 1:合并单元格的表头读出来是 NaN—— 读取前先把 Excel 里的合并单元格拆开, 或读的时候指定 header 行(pd.read_excel(file, header=2))坑 2:日期读成了一串数字(45000 之类)—— 这是 Excel 的日期序列号,处理: pd.to_datetime(df["日期列"], origin="1899-12-30", unit="D") (或读的时候就用 openpyxl 按单元格格式读)坑 3:数字被读成了文本——"1,000" 带千分位的字符串: df["金额"] = df["金额"].astype(str).str.replace(",", "").astype(float)坑 4:写回时把公式覆盖掉了——pandas 写出会抹掉公式, 需要「保留公式只改数据」的场景用 openpyxl 逐单元格写入,别用 to_excel 整表覆盖Excel 自动化是 Python 应用的性价比之王:学习成本一两天,回报是每周固定省下的几小时。给你的起步建议:挑你手里重复次数最多的那张表(一定有一张),按场景 1 或 2 的模板改个文件名跑一遍——第一次跑通的那个瞬间,你会开始用「这个能不能自动化」的眼光重新审视手头所有工作。工具的价值从来不在于多高级,在于它替你守住的那几个小时——省下来的时间,才是你学 Python 的第一笔利息。















































































