在政务、企业管理等日常工作中,向几十甚至上百个下属单位收集报表是高频场景,而后续的报表合并、数据汇总、统计分析更是典型的 “繁琐重活”:人工核对格式、逐表复制粘贴、手动计算汇总,不仅耗时数小时甚至数天,还极易因表格格式差异、数据录入错误出现纰漏。
而借助 Python,只需编写一次通用脚本,就能在几分钟内自动完成全流程处理—— 不管是几十份还是上百份报表,都能批量读取、统一格式、精准合并、自动统计,既大幅节省人力成本,又能杜绝人工操作的误差。下面结合实际工作案例,详细介绍如何用 Python 实现报表的批量合并与汇总统计。
1. 安装依赖库:首先在终端执行以下命令安装所需工具(pandas处理Excel和数据,openpyxl支持.xlsx格式):pip install pandas openpyxl
2. 文件整理:将所有需要汇总的Excel文件放到同一个文件夹(比如命名为excel_data),确保所有文件的核心列名一致(比如都有「日期」「部门」「金额」「销量」等列)。这个代码包含:批量读取文件、数据合并、基础统计(求和/计数/均值)、异常处理(跳过损坏文件)、结果导出。import osimport pandas as pd# -------------------------- 配置参数(根据你的需求改) --------------------------EXCEL_FOLDER = "./excel_data" # Excel文件所在文件夹路径OUTPUT_MERGE = "合并总表.xlsx" # 所有数据合并后的总表文件名OUTPUT_STAT = "汇总统计结果.xlsx" # 统计结果文件名# 需要统计的列和统计方式(键=列名,值=统计方法,支持sum/count/mean/max/min等)STAT_CONFIG = { "金额": ["sum", "mean"], # 金额求和、求平均值 "销量": ["sum", "count"], # 销量求和、统计记录数 "利润": ["sum", "max"] # 利润求和、求最大值}GROUP_BY_COL = "部门" # 按哪个列分组统计(比如按部门、按日期)# -------------------------- 核心逻辑:批量读取+合并数据 --------------------------def batch_read_excel(folder_path): """批量读取文件夹中的Excel文件,返回合并后的DataFrame""" all_data = [] # 遍历文件夹中的所有文件 for file_name in os.listdir(folder_path): # 只处理.xlsx和.xls文件 if not file_name.endswith((".xlsx", ".xls")): continue file_path = os.path.join(folder_path, file_name) try: # 读取Excel文件(默认读取第一个工作表) df = pd.read_excel( file_path, engine="openpyxl" if file_name.endswith(".xlsx") else "xlrd" ) # 新增一列标记数据来源,方便溯源 df["数据来源文件"] = file_name all_data.append(df) print(f"✅ 成功读取:{file_name}") except Exception as e: # 跳过损坏或读取失败的文件,打印错误信息 print(f"❌ 读取失败 {file_name}:{str(e)}") continue # 合并所有数据,忽略行索引 if all_data: merged_df = pd.concat(all_data, ignore_index=True) print(f"\n📊 共读取 {len(all_data)} 个Excel文件,总记录数:{len(merged_df)}") return merged_df else: print("⚠️ 未找到有效Excel文件!") return pd.DataFrame()# -------------------------- 核心逻辑:汇总统计 --------------------------def stat_merged_data(merged_df, group_col, stat_config): """对合并后的数据按指定列分组统计""" # 按分组列聚合,执行指定的统计方法 stat_df = merged_df.groupby(group_col).agg(stat_config).reset_index() # 简化列名(比如把("金额", "sum")改成"金额_总和") stat_df.columns = [ group_col if col[0] == group_col else f"{col[0]}_{col[1]}" for col in stat_df.columns ] return stat_df# -------------------------- 主程序执行 --------------------------if __name__ == "__main__": # 1. 批量读取并合并数据 merged_data = batch_read_excel(EXCEL_FOLDER) if not merged_data.empty: # 2. 导出合并后的总表 merged_data.to_excel(OUTPUT_MERGE, index=False) print(f"\n📝 合并总表已保存:{OUTPUT_MERGE}") # 3. 执行汇总统计 stat_data = stat_merged_data(merged_data, GROUP_BY_COL, STAT_CONFIG) # 4. 导出统计结果 stat_data.to_excel(OUTPUT_STAT, index=False) print(f"📈 统计结果已保存:{OUTPUT_STAT}") # 可选:打印前5行统计结果预览 print("\n🔍 统计结果预览:") print(stat_data.head())
1. 配置参数区:你只需要改这里的参数,不用动核心逻辑: EXCEL_FOLDER:改成你的Excel文件夹路径(比如Windows路径C:/Users/xxx/Desktop/excel_data); STAT_CONFIG:自定义要统计的列和方法(比如想统计「人数」的计数,就加"人数": ["count"]); GROUP_BY_COL:想按日期统计就改成"日期",想按区域统计就改成"区域"。 2. 异常处理:代码中用try-except包裹了文件读取逻辑,即使某个Excel文件损坏/格式错误,也不会中断程序,只会跳过并提示错误。 3. 数据溯源:自动新增「数据来源文件」列,方便你后续核对某条数据来自哪个Excel文件。 合并总表.xlsx:包含所有Excel文件的所有行,新增「数据来源文件」列; 汇总统计结果.xlsx:按「部门」分组的统计结果,比如: 1. Excel有多个工作表:修改pd.read_excel时指定sheet_name="工作表名"(比如sheet_name="销售数据"); 2. 只汇总部分列:合并后添加merged_data = merged_data[["部门", "金额", "销量", "数据来源文件"]]筛选列; 3. 按多列分组统计:把GROUP_BY_COL改成列表,比如GROUP_BY_COL = ["部门", "日期"]。 1. 核心流程:整理文件→配置参数→运行代码,三步即可完成数百个Excel的汇总统计,无需手动逐个处理; 2. 代码特性:自带异常处理、数据溯源、灵活配置统计规则,适配新手和批量处理场景; 3. 输出结果:同时生成「合并总表」(保留所有原始数据)和「统计结果表」(直接看汇总数据),兼顾溯源和分析需求。 文章仅供参考,需了解详细内容请关注公众号,可交流互动,互相学习,共同提高!