资讯动态

用Python批量汇总Excel:从手动复制到一键自动化的完整方案

发布时间:2026/10/13 6:56:28 来源:尧图企业网站定制
每天收上来的水果销售日报十几个文件堆在微信群里文件名五花八门有的叫“7月1日苹果店”有的直接叫“新建 Microsoft Excel 工作表”打开一看格式还不统一。以前我用Excel汇总水果数量全靠手动复制粘贴再拉到汇总表里用SUMIFS一项项算几百行数据盯得眼睛发花还老怕漏算一行。后来我干脆用Python写了个小脚本把这一堆Excel批量读进来按水果名称分类汇总几秒钟就出一张总表。这个脚本不需要多高深的技术装了Python、会复制粘贴命令就能跑起来非常适合每天被Excel重复性统计折磨的朋友。这篇文章我不绕弯子直接从需求讲起把环境安装、核心代码、常见坑和进阶玩法完整梳理一遍。你不需要懂编程原理跟着步骤走我保证你能在半小时内跑出第一份汇总结果。1. 需求梳理为什么要写这个汇总脚本1.1 手动统计到底痛在哪在写代码之前我必须先把“为什么要用Python”这件事讲透。如果你只是偶尔汇一次手动操作完全够了杀鸡不用牛刀。但如果你每周、每月都要面对几十个Excel文件手动统计的痛点会非常具体数据分散。每个门店、每个班次、每个日期都可能是一个独立文件你要把所有文件里的数据堆到一张总表里。容易出错。复制粘贴的时候行错位、列错位太常见了尤其涉及大量数字时一个单元格粘错位最终结果就全错。格式不一致。有的表格第一行是标题有的是表头有的数据中间夹着空行有的数量写的是文本格式。重复劳动。同样的操作下个月还要再来一遍每次都花一两个小时做完人都是麻木的。这里有个很好的生活类比手工统计就像把几百张纸条上的文字誊写到一张大纸上誊一次两次还能忍天天誊就会崩溃。而Python做的无非三件事——读取、合并、按条件求和。和你在Excel里手动做的工作一模一样区别是它不会疲劳、不会眼花、不会漏行。1.2 Python解决Excel汇总的核心思路用Python处理Excel的核心工具叫pandas我用一句话说明它的价值它能把Excel表格变成内存里的一张“电子表格”你可以用代码对这张表做筛选、分组、求和、排序。解决这个水果汇总问题代码逻辑其实就是三个动作读取把文件夹下每个Excel文件里的数据读进Python。合并把所有表格按行纵向拼接形成一张完整的大表。汇总按“水果名称”分组把“数量”加起来得到每种水果的总数。你可能会问Excel本身也有Power Query、透视表、VBA为什么非要学Python我的理由很实在。Power Query虽然也能合并多表但录制和排错的成本比写代码高VBA则是老古董语法环境兼容性和可维护性都很一般。Python的优势在于代码写一次就留档了下次数据更新往文件夹里一丢双击运行就有结果而且它不是一个只能做Excel汇总的工具后期还能扩展到自动发邮件、生成图表、定时运行。你花半小时学这个脚本等于同时打开了一扇自动化操作的门。2. 环境准备从零装好Python和Excel的读写工具2.1 安装Python的详细步骤这个部分我尽量写得傻瓜化因为真的有很多朋友卡在第一步。去Python官网python.org下载安装包选择Windows installer版本。这里有一个特别关键的点安装界面第一页务必勾选最下方的“Add python.exe to PATH”没勾这个选项后面命令行会报“python不是内部或外部命令”。安装完成后验证一下按WinR键打开运行窗口输入cmd回车然后在黑色命令行窗口里敲python --version如果显示类似Python 3.12.2这样的版本号说明装好了。如果提示找不到python大概率就是刚才那个PATH没有勾选。解决方法是重装一遍或者手动把安装路径加到系统环境变量里。对新手来说最省心的做法就是重装时勾上。2.2 安装pandas与openpyxlPython装好之后只是有了个“空壳”读写Excel还需要装第三方库。打开命令行依次执行下面两条命令pip install pandas pip install openpyxl这里解释一下为什么要装两个库。pandas负责表格数据处理openpyxl则是底层引擎负责解析和生成.xlsx格式文件。pandas在读Excel文件时会调用openpyxl来干活所以最好两个一起装。验证是否装好执行python -c import pandas; print(pandas.__version__)能打印出版本号就说明一切正常。另外我建议新手直接用一个叫VS Code的免费编辑器安装过程很简单百度一下就有教程。如果你不想折腾用Python自带的IDLE也能写代码只是用起来没那么顺手。对纯小白来说先跑通功能再优化工作环境这个顺序最合理。3. 一键汇总水果数量的代码实现3.1 读取Excel文件的几种写法先看最基本的读取操作。假设你有一个叫做“水果台账.xlsx”的文件里面有列“水果名称”和“数量”用pandas读取只需要一行import pandas as pd df pd.read_excel(水果台账.xlsx) print(df.head())这段代码会把Excel表格读进来并打印前5行。这里有个非常容易踩的坑如果文件里并不是从第一行开始就是表头比如第一行写了个大标题“2024年7月水果台账”第二行才是“水果名称”那么读进来后表头就错位了。解决办法是告诉pandas第几行是真正的表头df pd.read_excel(水果台账.xlsx, header1)我觉得这个参数值得你记住因为实际工作中十个表格里至少有四五个是带标题行的。如果你的水果数据不是分散在多个文件里而是集中在同一个Excel文件的多个sheet里那也不怕。pandas的read_excel支持一次读全部sheetsheets pd.read_excel(水果台账.xlsx, sheet_nameNone) all_data pd.concat(sheets.values(), ignore_indexTrue)sheet_nameNone的意思是“读入所有sheet”返回结果是一个字典每个key是一个sheet名value是对应的表格数据。后面再用pd.concat把所有sheet纵向拼起来。这样单个文件多sheet的合并也搞定了。3.2 多文件批量汇总、分组统计与结果导出下面进入正题给出能直接复制的完整脚本。假设场景是这样你有一个文件夹叫“水果日报”里面每个Excel文件的结构都一样都包含“水果名称”和“数量”两列现在要把所有文件汇总成一张总表。import os import pandas as pd folder_path 水果日报 all_data pd.DataFrame() for file_name in os.listdir(folder_path): if file_name.endswith(.xlsx): file_path os.path.join(folder_path, file_name) df pd.read_excel(file_path) all_data pd.concat([all_data, df], ignore_indexTrue) result all_data.groupby(水果名称, as_indexFalse)[数量].sum() result result.sort_values(数量, ascendingFalse) result.to_excel(水果汇总结果.xlsx, indexFalse) print(result)我逐行讲一下这段脚本在做什么理解之后你自己就能改。os.listdir(folder_path)用来获取文件夹下所有文件的文件名列表file_name.endswith(.xlsx)是筛选条件只要Excel文件。拿到文件名后用os.path.join拼出完整路径交给pd.read_excel读取再用pd.concat把当前文件追加到all_data后面。循环结束后all_data里已经是所有文件数据的汇总表。all_data.groupby(水果名称, as_indexFalse)[数量].sum()这行其实就是在做Excel里SUMIF做的事——按水果名称分组把数量求和。as_indexFalse是个实用细节它让“水果名称”保留成一列而不是变成行索引后续导出时格式更友好。最后用to_excel把结果保存成新的Excel文件indexFalse表示不写入行号。脚本放到与“水果日报”文件夹同级的目录下运行后工作目录里就会多出一个“水果汇总结果.xlsx”。3.3 运行脚本与结果验证把上面的代码复制到编辑器里保存为fruit_summary.py。打开命令行切到脚本所在目录执行python fruit_summary.py正常情况下你会看到终端里打印出一张表格左边是水果名称右边是汇总数量。同时目录下生成了汇总Excel。我第一次跑通这个脚本是在一个周五下午看到结果文件生成的那一刻说实话心里踏实了——那一刻我确认自己以后再也不用手动誊数据了。运行通过后我建议你做一次交叉验证挑一种水果手动在一个源文件里查它的数量再跟汇总结果对比。如果一致说明脚本逻辑没问题如果不一致优先检查源文件的列名是否完全相同比如有的文件写“水果名称”有的写“品名”这样合并后会被当成两个分组结果就“对不上”了。这是新手最容易踩的隐形坑。4. 实战中极易踩坑的三个环节路径、编码与数据格式4.1 文件路径报错排查方法新手运行脚本最常见的报错就是FileNotFoundError: [Errno 2] No such file or directory。这个报错翻译成人话就是Python在当前工作目录下找不到你指定的文件夹或文件。我建议你写路径的时候先想清楚“我的脚本在哪里运行”。如果脚本放在桌面而“水果日报”文件夹也在桌面那没问题。但如果你用VS Code打开的是其他目录运行脚本时工作目录可能就不对这时候相对路径就会失效。最稳妥的排查方案在脚本开头加一行检查代码把路径问题提前暴露出来import os folder_path 水果日报 print(当前工作目录, os.getcwd()) print(文件夹是否存在, os.path.exists(folder_path))看到打印结果后如果工作目录不是你预期的就在命令行里先cd到正确目录再运行或者直接改用绝对路径folder_path rD:\工作\每日盘点\水果日报注意我用了r前缀表示后面的字符串是原始字符串反斜杠不会被当成转义符。Windows路径里反斜杠比较多这个细节很容易被忽略。4.2 编码与重复表头等数据格式问题读xlsx文件一般不会遇到编码问题因为xlsx内部就是XML结构pandas会处理好。但如果你后面顺手读了CSV文件就会频繁遇到UnicodeDecodeError这个问题的标准解法是指定编码df pd.read_csv(数据.csv, encodingutf-8)如果还是报错就把utf-8换成gbk。这通常是因为文件是旧版Windows的中文编码。比编码更隐蔽的问题是重复表头。我给学员看过一个很典型的例子一个水果日报文件前10行都是每天的“合计”行表头“水果名称”出现在中间位置。直接读进来后前面的合计行会被当成正常数据参与求和最终结果翻倍。遇到这种表格老老实实header参数指定表头行然后该过滤的过滤别图省事。有时候数据里还会混入类似“苹果红富士”和“苹果”这样的写法分组时它们会被当成两个种类。要不要统一口径取决于你的统计需求。实务中我建议在源文件里就统一命名不要在脚本里做太多“救火”式的处理。4.3 给数据“治病”类型转换与空值处理Excel表里的数字并不一定都是数字。我见过很多“数量”列的单元格其实是文本格式左下角带一个绿色的小三角这种数据读进pandas后会被识别成字符串求和时就变成把字符串拼在一起结果一塌糊涂。解决办法是显式转成数值类型df[数量] pd.to_numeric(df[数量], errorscoerce)errorscoerce的意思是能转成数字的就转转不了的变成NaN缺失值。这个参数给了我们很大的容错空间。转完之后再做一次空值处理。如果你是做汇总统计用fillna(0)把NaN填充成0或者用dropna()直接丢弃空行都行。我自己的习惯是先fillna(0)再看总和因为数量为空通常意味着当天没有该水果的销售记录按0处理符合业务逻辑。4.4 文件命名规范和字段格式统一建议这部分看着像行政管理其实是数据工作的基本功。我强烈建议给团队的表格做一个简单约定文件名统一带日期例如“20240701_苹果店.xlsx”表头永远放在第一行第一列不要写“序”之类的多余信息不要合并单元格不要在表头下面放空行。这些约定不是为了强迫症而是为了让你写出来的脚本能长期稳定地运行。脚本处理规范数据时会非常省心但一遇到“特例”就得手工介入一旦处理逻辑没写全结果就可能出错。规范数据格式其实是把不确定性挡在脚本外面。5. 进阶玩法让脚本变成日常可用的工具5.1 加上汇总时间和异常日志基础脚本能跑通之后我建议你加一点“使用体验”层面的提升。比如汇总结果中标明生成时间避免多天多次运行时不知道哪份是最新结果from datetime import datetime result[汇总时间] datetime.now().strftime(%Y-%m-%d %H:%M:%S)再比如加一个简单的异常捕获读文件过程中哪个文件出错了不要中断整个程序而是记下来继续处理failed_files [] for file_name in os.listdir(folder_path): try: df pd.read_excel(file_path) except Exception as e: failed_files.append((file_name, str(e))) continue最后把failed_files打印出来你就能知道哪些文件需要人工看一眼。这个小技巧在实际使用中非常管用不是你代码写得不行是数据永远比你想象的更乱。5.2 用Windows任务计划程序实现定时自动汇总如果你每天一早到公司就要提交昨天的数据汇总可以把这个手动运行的过程改成自动的。Windows自带的“任务计划程序”就行新建基本任务触发器选“每天”时间设成早上8点半操作选“启动程序”程序填python.exe的完整路径添加参数填脚本完整路径起始于填脚本所在目录。这里有个经验python.exe的路径可以用命令行执行where python查到。设置完成后可以右键任务点“运行”测试一次确认能生成文件再放心。定时任务跑完之后你到公司看到的结果文件已经是新鲜出炉的连运行命令这一步都省了。5.3 打包成exe给同事使用脚本做出来后同事会很羡慕但他们电脑上没装Python运行不了。这时候可以打包成exe。装一个打包工具pip install pyinstaller然后执行pyinstaller -F fruit_summary.py在生成的dist目录下就会有一个fruit_summary.exe。把exe和“水果日报”文件夹放到同一个目录双击exe就能生成汇总结果。需要注意两点一是打包时脚本里如果用相对路径要保证exe和文件夹的相对位置和脚本运行环境一致二是一些杀毒软件可能对exe有误报建议先打包给熟悉的同事试用。5.4 扩展方向多维度汇总与结果分发脚本的经济价值在于“复利”。今天你只会汇总水果数量明天稍微改一下groupby里的字段就能汇总门店、日期的销售总数后天加一列成本价填一朵乘法公式就能算出毛利。再往下走汇总完成后直接调用企业微信或钉钉机器人接口把结果推送出去那就真的把整个周报流程自动化了。我个人对这套方案的感受是它最大的价值不是省了每天半小时的操作时间而是从此“不会再算错”。机器不会疲倦不会看花眼不会因为心情不好把苹果和梨的数字对调。代码一旦写好结果就是确定性的人类只需要在数据源头保证质量就够了。最后分享一个小技巧脚本里多加print把每个文件的读取状态打印出来。很多人怕代码报错其实报错不怕怕的是不知道错在哪一步。打印信息就是给你的代码装上一双眼睛跑起来的时候你会清楚地看到“读到第几个文件了”“哪一步出问题了”。这份掌控感才是用代码干活最让人安心的地方。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑