大家好,我是何三,80后老猿,独立开发者。

继续我们的“5分钟Python自动化”系列。上次我们学会了《5分钟学会用Python从网站抓取数据》,解放了双手。今天,我们来解决另一个办公中的高频痛点——批量处理Excel文件

有这样的场景:你是行政、财务或销售,每周/每月都要从不同同事或系统那里收到一堆格式相同的Excel报表:销售一部.xlsx销售二部.xlsx... 你的任务是把这几十个文件打开,把里面的数据一个个复制粘贴到一个总表里进行汇总分析。

传统做法:一个个打开文件,眼睛盯着屏幕找数据,手不停地Ctrl+CCtrl+V,耗时半小时起步,头晕眼花,还容易漏掉行或列。

Python做法:1个脚本,执行3秒钟,一键合并所有文件!从此准时下班不是梦。

今天,我就带你用5分钟,掌握这个让无数办公族羡慕的“黑科技”!

环境准备:这次多一步,一劳永逸

在开始之前,你需要:

  1. 安装Python(这个已经有了)
  2. 安装一个关键库:打开你的命令行(CMD或终端),输入下面这行命令,然后按回车: bash pip install pandas openpyxl
    • pandas:Python里处理表格数据的“瑞士军刀”,强大到没朋友。
    • openpyxl:让pandas能读写新版Excel文件(.xlsx)的“引擎”。
  3. 一个文本编辑器
  4. 一个装满待合并Excel文件的文件夹

就多了一步安装库,但换来的能力是颠覆性的!

核心代码:10行搞定报表合并

让我们直接上“魔法”,感受一下用代码操控数据的快感:

import pandas as pd  # 导入数据分析工具箱
import os  # 导入文件操作工具箱

# 设置存放所有Excel文件的文件夹路径
folder_path = "./销售报表"

# 创建一个空的列表,用来装每个文件的数据
all_data = []

# 遍历文件夹中的每一个文件
for file in os.listdir(folder_path):
    # 只处理Excel文件
    if file.endswith('.xlsx') or file.endswith('.xls'):
        # 构建完整的文件路径
        file_path = os.path.join(folder_path, file)
        # 读取Excel文件,将其变为pandas的DataFrame(一种表格数据结构)
        df = pd.read_excel(file_path)
        # 把这个表格数据添加到总列表中
        all_data.append(df)

# 将列表中的所有表格数据垂直堆叠合并成一个大的总表
final_df = pd.concat(all_data, ignore_index=True)

# 将合并后的总表保存到一个新的Excel文件中
final_df.to_excel("合并后的总报表.xlsx", index=False)

print("所有Excel文件合并完成!快去查看‘合并后的总报表.xlsx’吧!")

逐行详解:理解数据合并的奥秘

第1-2行:导入超级工具箱

import pandas as pd
import os

pandas 是我们的主力,给它起个昵称pd,后面用起来更方便。

第3-5行:锁定目标与准备“容器”

folder_path = "./销售报表"
all_data = []
  • 指定你的Excel文件堆放在哪个文件夹。
  • all_data = [] 准备一个空的“魔法篮子”,用来装每个Excel文件里的数据。

第6-13行:循环读取,见一个“吃”一个

for file in os.listdir(folder_path):
    if file.endswith('.xlsx') or file.endswith('.xls'):
        file_path = os.path.join(folder_path, file)
        df = pd.read_excel(file_path)
        all_data.append(df)

这是脚本的核心逻辑

  1. for file in ...:让电脑自动浏览销售报表文件夹里的每一个文件。
  2. if file.endswith(...):做一个判断,只对以.xlsx.xls结尾的Excel文件下手。
  3. file_path = ...:拼凑出文件的完整地址,告诉电脑文件在哪。
  4. df = pd.read_excel(file_path)最关键的魔法! pd.read_excel() 函数能直接读取整个Excel文件的内容,并将其转换成一个叫DataFrame的智能表格对象,我们把它赋值给变量df
  5. all_data.append(df):把这个智能表格df放进我们准备好的“魔法篮子”all_data里。

第14-17行:合并数据并输出成果

final_df = pd.concat(all_data, ignore_index=True)
final_df.to_excel("合并后的总报表.xlsx", index=False)
  • pd.concat(all_data, ...)第二个关键魔法! concat 函数能把“篮子”里所有的智能表格(df)垂直地堆叠、拼接在一起,形成一个巨大的总表final_df
    • ignore_index=True 是为了让合并后的总表行号从0开始重新整齐排列。
  • to_excel(...):将最终合并好的大总表final_df,写入到一个全新的Excel文件里。
    • index=False 表示不将DataFrame的行索引保存到Excel中,让表格更整洁。

实战演示:告别复制粘贴

  1. 准备阶段:创建一个名为销售报表的文件夹,里面放几个测试的Excel文件(确保它们的表头/列结构是一样的)。
  2. 保存脚本:将上面的代码保存为merge_excel.py,放在与销售报表文件夹同级的目录。
  3. 运行脚本:打开命令行,输入:
python merge_excel.py
  1. 查看结果:脚本运行完毕后,当前目录下会生成一个全新的 合并后的总报表.xlsx 文件,打开它,所有分公司的数据都已经整整齐齐地合并在一起了!

运行前

销售报表/
  ├── 销售一部.xlsx
  ├── 销售二部.xlsx
  ├── 销售三部.xlsx
  └── ...

运行后

(当前目录)/
  ├── merge_excel.py
  ├── 销售报表/ (里面的文件原封不动)
  └── 合并后的总报表.xlsx <-- 新生成的终极总表!

举一反三:定制你的数据处理流水线

这个脚本的潜力远不止简单合并,稍微修改,它就能变成你的专属数据助理:

案例1:合并时只读取特定Sheet

如果你的Excel文件有多个工作表,只想合并名为"月度数据"的Sheet:

# 在 pd.read_excel() 里加上 sheet_name 参数
df = pd.read_excel(file_path, sheet_name='月度数据')

案例2:合并时只保留需要的列

假设你只关心"销售人员""销售额""日期"这三列:

# 读取时指定列
df = pd.read_excel(file_path, usecols=['销售人员', '销售额', '日期'])

案例3:给每个分部的数据打上标签

合并后想知道某条数据来自哪个分部?

for file in os.listdir(folder_path):
    if file.endswith('.xlsx'):
        file_path = os.path.join(folder_path, file)
        df = pd.read_excel(file_path)
        # 新增一列‘分部名称’,值为文件名(去掉扩展名)
        df['分部名称'] = os.path.splitext(file)[0]
        all_data.append(df)

案例4:处理CSV文件

如果你的数据是.csv格式,只需改动一行:

# 将判断和读取Excel的代码换成CSV的:
if file.endswith('.csv'):
    df = pd.read_csv(file_path) # 使用 read_csv 函数

注意事项与进阶技巧

确保表头一致

合并的前提是各个Excel文件的列名(表头)是一致的,否则数据会对不上。在运行前最好先抽查确认一下。

更健壮的增强版脚本

添加错误处理,让脚本更稳定、更友好:

import pandas as pd
import os

folder_path = "./销售报表"
all_data = []

for file in os.listdir(folder_path):
    if file.endswith(('.xlsx', '.xls')): # 支持多种Excel格式
        file_path = os.path.join(folder_path, file)
        try:
            # 尝试读取文件
            df = pd.read_excel(file_path)
            # 可选:在这里进行数据清洗,比如去除空行
            # df = df.dropna()
            all_data.append(df)
            print(f"成功读取并缓存: {file}")
        except Exception as e:
            # 如果某个文件读取失败,打印错误并继续处理下一个,而不是整个脚本崩溃
            print(f"!!! 读取文件 {file} 时出错: {e} !!!")

if all_data: # 检查列表是否为空
    final_df = pd.concat(all_data, ignore_index=True)
    final_df.to_excel("合并后的总报表.xlsx", index=False)
    print(f"合并完成!共处理 {len(all_data)} 个文件,总数据行数:{len(final_df)}")
else:
    print("未找到任何可处理的Excel文件,请检查文件夹路径和文件格式。")

结语:你的数据分析师之路,从此开始

恭喜!在又一个5分钟内,你解锁了一项更高级的自动化技能:

✅ 用pandas库轻松读取Excel数据 ✅ 使用循环自动处理多个数据文件 ✅ 用concat函数实现数据表的智能合并 ✅ 具备了编写健壮脚本的错误处理意识

今天你学会的不仅仅是合并Excel,而是打开了一扇名为“数据处理自动化”的大门。

想象一下,接下来你可以: - 批量对每个Excel文件进行数据清洗和计算。 - 自动从总表中生成可视化图表和报告。 - 定时运行这个脚本,实现日报、周报的自动汇总。

工具的意义在于将人从重复劳动中解放出来,去从事更有创造性的工作。

现在,就去找一个你工作中需要合并Excel的场景,用这个脚本去试一试!在评论区分享你用这5分钟节省了多少小时的生命吧!

《5分钟用Python批量重命名文件》 《5分钟学会用Python从网站抓取数据》