下班前用 Python,10 分钟合并 30 张报表
很多人怕的不是做月报,是合并月报。
每到月末,三十张分表从各个分公司、各个门店、各个业务线飞过来。结构一模一样,要的只是把它们叠成一张总表。听着简单,手动做起来全是坑:一行行复制粘贴,眼睛看花,手一抖就错位,漏掉一张你还发现不了,等老板问起来才知道数据对不上。
一个下午,就这么没了。
我有个做运营的朋友,每个月末都要把三十多张销售分表合并成月报。她说最崩溃的不是数据多,是明明干的是"复制粘贴"这种毫无技术含量的活,却占掉她半个休息日。
这事,用 Python 写二十行代码,点一下,十秒出结果。
不是夸张。是规则固定、重复发生的活,机器天生比人快
01 先认清:你要合并的不是文件,是结构
动手前先想清楚一件事:这些分表,是不是"结构完全相同"——同样的列名、同样的顺序、同样的格式?
如果是,那合并就是纯粹的"纵向堆叠":把所有行的数据,依次接在第一张表后面。规则一清二楚,代码才好写。
如果结构不同,比如有的多一列、有的顺序乱了,那就不是简单合并,得先对齐字段。别一上来就跑代码,先把表头拍平对齐,这一步想清楚,后面省十倍时间。
规则定准,是自动化的第一步,也是最关键的一步。
02 三行扫出所有分表
用 pathlib 把文件夹里的 Excel 文件一次性找出来,不用你手动一个个点。
from pathlib import Path files = sorted(Path("分表").glob("*.xlsx")) print(f"找到 {len(files)} 张分表")Path("分表").glob("*.xlsx") 会把这个文件夹下所有 xlsx 文件列出来,sorted 保证按文件名顺序处理,结果稳。换成 "*.xls" 也能用,看你手里的文件格式。
这一步替你完成了最烦的"逐个打开看"。以前你要用眼睛扫三十次,现在电脑一次扫完。
03 核心逻辑:用 openpyxl 逐个读、纵向拼
合并 xlsx 需要一个轻量库 openpyxl,装一行命令就行:pip install openpyxl。之后读表、写表都靠它。
import openpyxl wb = openpyxl.Workbook() out = wb.active out.append(["日期", "门店", "销售额"]) # 写入表头 for f in files: wk = openpyxl.load_workbook(f, data_only=True) ws = wk.active for row in ws.iter_rows(min_row=2, values_only=True): out.append(row) wb.save("月报_合并.xlsx")min_row=2 跳过每张分表自己的表头,只取数据行;values_only=True 直接拿单元格的值,不拿公式。最后把所有行追加到总表,存成一张新表。
为什么用 openpyxl 而不是更重的 pandas?因为它只做读写、依赖小、上手快,合并这类活它刚刚好,不必为一个小任务背上整个数据分析库。
多张分表,纵向汇入一张总表
04 避坑:表头、空表、列不一致
真实数据没那么乖,三个坑必须提前堵。
第一,表头重复。如果忘了 min_row=2,每张表头都会写进总表,数据中间夹着一行"日期/门店/销售额",后面分析全乱。务必只保留一次表头。
第二,空表或半空行。有的分表可能只有表头没有数据,append 会写进空行。加个判断:if any(row): out.append(row),跳过全空行。
第三,列顺序不一致。万一某张表列顺序和第一张不同,纵向拼会把"销售额"塞进"门店"列。合并前先检查每张表的表头是否一致:
header = [c.value for c in ws[1]] assert header == first_header, f"{f.name} 表头不一致"不一致就先停下报警,别硬拼。工具再快,也得先保证对。
核心几行:用 openpyxl 跳过表头、纵向拼接
我那朋友照着改了改路径和表头,月末只要把三十张表丢进"分表"文件夹,跑一下脚本,一张干净的月报就出来了。
她算过一笔账:手动复制粘贴平均每次三个多小时,还经常出错返工;脚本跑完不到十秒,且从不出错。一个月省下的不是十分钟,是整整一个下午加一份好心情。
更关键的是,这套逻辑换个场景照样用:把"销售分表"换成"各月流水""各区域库存""各项目工时",改的只是文件夹名和表头,骨架永远不动。
同样的工作,手动一下午 vs 脚本十秒
所以,合并报表这件事,难的从来不是动手,是想清楚"结构是否一致"。
第一,先确认所有分表结构相同;第二,用 pathlib 扫出全部文件;第三,用 openpyxl 跳过表头、纵向拼接;第四,合并前校验表头、跳过空行。
把这四件事做到位,你也能用 Python 把月末一下午的活,压缩到十秒。
如果这篇对你有用,点个在看,或者转发给那个还在手动合并报表的同事。
#WorkBuddy #Python自动化 #效率提升 #下班前用Python