本教程适用于你需要:
- 自动遍历多个子目录,收集表头一致的 Excel 文件
- 合并内容到一个总表中
- 并记录每条数据“来源于哪个 Excel 文件”,实现可追溯(溯源)
📦 1. 安装依赖包(仅需一次)
pip install pandas openpyxl
📁 2. 示例目录结构
project_folder/
│
├── 解压结果/ ← 设为 unzip_root
│ ├── 文件夹1/
│ │ └── report_A.xlsx
│ ├── 文件夹2/
│ │ └── report_B.xlsx
│
├── merge_with_trace.py ← 本脚本
🧠 3. 脚本源码(已添加【来源文件】列用于溯源)
import os
import pandas as pd
# 📁 1. 解压后的根目录(根据实际修改)
unzip_root = 'C:/Users/yourname/Desktop/解压结果'
# 📄 2. 合并结果的输出文件
merged_excel_path = os.path.join(unzip_root, '溯源结果.xlsx')
# 📋 3. 用于保存所有有效 Excel 表的数据列表
all_data = []
# 🔍 4. 遍历所有子文件夹和 Excel 文件
for root, dirs, files in os.walk(unzip_root):
for file in files:
if file.endswith('.xlsx') or file.endswith('.xls'):
file_path = os.path.join(root, file)
try:
df = pd.read_excel(file_path)
# ✅ 跳过空表格(只有表头或全为空行)
if df.dropna(how='all').shape[0] > 1:
# ✨ 添加溯源信息(来源文件名 + 相对路径)
relative_path = os.path.relpath(file_path, unzip_root)
df['来源文件'] = file # 如:report_A.xlsx
df['来源路径'] = relative_path # 如:文件夹1/report_A.xlsx
all_data.append(df)
print(f'✅ 已读取:{file_path}')
else:
print(f'⚠️ 跳过(无有效数据):{file_path}')
except Exception as e:
print(f'❌ 读取失败:{file_path},错误信息:{e}')
# 📝 5. 合并所有读取到的数据并保存
if all_data:
merged_df = pd.concat(all_data, ignore_index=True)
merged_df.to_excel(merged_excel_path, index=False)
print(f'\n🎉 合并完成!结果文件保存为:{merged_excel_path}')
else:
print('\n❌ 没有发现可合并的数据文件。')
📌 4. 字段说明
| 字段名 | 说明 |
|---|---|
| 来源文件 | 当前这行数据来自的 Excel 文件名 |
| 来源路径 | 文件的相对路径(包含子目录) |
✅ 5. 如何运行
- 将脚本
merge_with_trace.py放在合适位置 - 修改
unzip_root为你的真实路径 - 运行脚本:
python merge_with_trace.py
❗ 6. 常见问题排查
| 错误提示 | 说明 |
|---|---|
ValueError: No objects to concatenate | 所有文件都为空或读取失败 |
KeyError / ParserError | 表格结构异常,可能为模板文件或被破坏 |
openpyxl not found | 安装依赖:pip install openpyxl |
🎯 总结
本脚本能自动实现:
- 📂 批量读取多层目录 Excel
- ✅ 合并内容并排除空数据
- 🔍 记录数据来源,方便溯源
- 💾 生成可导入的数据文件,便于汇总分析

被折叠的 条评论
为什么被折叠?



