Excel 数据合并技能
任务目标
将多个具有相同或相似表头的 Excel 文件智能合并为一个文件,支持数据清洗、来源追踪和格式保留。
前置准备
- 确认已安装依赖:
pip install pandas openpyxl - 可选安装 xlsxwriter(提升写入性能 2-3x):
pip install xlsxwriter - 准备待合并的 Excel 文件(.xlsx/.xls)
- 确定输出文件路径
操作步骤
基础合并流程
- 识别用户提供的 Excel 文件列表或目录
- 验证文件存在且可读
- 调用合并脚本执行合并
- 返回合并结果与统计信息
脚本调用说明
python scripts/merge.py --files <file1.xlsx> <file2.xlsx> --output <output.xlsx>
核心参数
| 参数 | 说明 | 默认值 |
|---|
| ------ | ------ | -------- |
--files | 待合并的 Excel 文件路径(至少1个) | 必需 |
--output | 输出文件路径 | 必需 |
--with-source | 添加"来源文件"列标记数据来源 | False |
--sheet | 指定读取的 Sheet 索引 | 0 |
--no-header | 首行不作为表头 | False |
性能优化参数
| 参数 | 说明 | 适用场景 |
|---|
| ------ | ------ | ---------- |
--no-parallel | 禁用多进程并行读取 | 文件数少或内存受限 |
--workers N | 最大并行进程数 | 调优 CPU 利用率 |
--chunksize N | 分块大小(>0启用分块模式) | 超大文件(>50万行) |
--no-batch | 禁用批量写入 | 小文件快速合并 |
格式保留参数
| 参数 | 说明 | 效果 |
|---|
| ------ | ------ | ------ |
--keep-format | 启用格式保留模式 | 保留所有单元格格式 |
保留的格式类型
- 字体(名称、大小、粗细、颜色、斜体)
- 填充(背景色、渐变填充)
- 边框样式(上下左右边框)
- 数字格式(日期、货币、百分比等)
- 对齐方式(水平、垂直、文本缩进)
- 列宽和行高
模式对比
| 模式 | 性能 | 格式保留 | 适用场景 |
|---|
| ------ | ------ | --------- | ---------- |
| 默认模式 | 高 | 否 | 纯数据合并 |
| 格式保留模式 | 中 | 完整 | 需要保留样式的报表 |
去重参数
| 参数 | 说明 | 默认值 |
|---|
| ------ | ------ | -------- |
--dedup | 合并后去重 | False(默认不去重) |
--dedup-cols | 按指定列去重(需配合 --dedup) | None(按全部列) |
去重说明
- 不指定
--dedup-cols:按所有列的值去重,完全相同的行只保留一条 - 指定
--dedup-cols:按指定列的值去重,保留首次出现的行
使用示例
示例1:基础合并(自动优化)
- 场景:合并目录下所有季度报表
- 命令:
python scripts/merge.py --files q1.xlsx q2.xlsx q3.xlsx --output yearly.xlsx - 预期产出:合并后的 yearly.xlsx,包含所有数据行
示例2:带来源标记 + 调优并行
- 场景:合并多部门数据,需追踪来源,文件较多
- 命令:
python scripts/merge.py --files dept_*.xlsx --output merged.xlsx --with-source --workers 4 - 预期产出:merged.xlsx,最后一列为"来源文件"列
示例3:超大文件分块模式
- 场景:单个超大 Excel 文件(100万行)
- 命令:
python scripts/merge.py --files big_data.xlsx --output result.xlsx --chunksize 20000 - 预期产出:内存峰值降低 80%,避免 OOM
示例4:保留格式合并
- 场景:合并多个格式化的报表,保持原有样式
- 命令:
python scripts/merge.py --files report_q1.xlsx report_q2.xlsx --output yearly_report.xlsx --keep-format - 预期产出:合并后保留字体、颜色、边框、列宽等格式
示例5:追加合并
- 场景:已有汇总表,新增数据追加进去
- 命令:
python scripts/merge.py --files existing.xlsx new_data.xlsx --output existing.xlsx - 预期产出:existing.xlsx 数据行增加(追加模式)
示例6:去重合并
- 场景:合并多文件并去除完全重复的行
- 命令:
python scripts/merge.py --files data1.xlsx data2.xlsx --output merged.xlsx --dedup - 预期产出:merged.xlsx,无重复行
示例7:按指定列去重
- 场景:按姓名去重,保留首次出现的数据
- 命令:
python scripts/merge.py --files a.xlsx b.xlsx --output unique.xlsx --dedup --dedup-cols 姓名 工号 - 预期产出:按姓名和工号组合去重后的数据
资源索引
注意事项
- 表头以第一个文件的列名为准
- 列数不匹配时自动适配(少列补空, 多列截断)
- 完全空白的行会被自动过滤
- 支持 .xlsx 和 .xls 格式
- Windows 下建议使用
--no-parallel 避免多进程问题 --keep-format 模式下性能略低于默认模式,建议仅在需要保留格式时使用