如何使用 Python 合并多个 Excel 文件

在实际工作中,数据往往分散在多个 Excel 文件中------比如按月份拆分的销售报表、按部门整理的员工信息、按地区统计的订单数据。需要汇总分析时,把这些文件合并到一个工作簿里是第一步。手工复制粘贴几十个工作表既耗时又容易出错,稍有不慎就会丢失格式或漏掉数据。

本文将介绍如何使用 Python 把多个 Excel 文件(.xlsx 和 .xls)合并到一个工作簿中。合并后,每个源文件的工作表会按原有名称和顺序保留下来,格式与数据完整无缺,可以直接用于后续的排序、筛选或数据分析。

为什么用代码合并 Excel 文件

用代码代替手工合并,主要带来三点好处:

  • 批量处理 - 无论文件是 3 个还是 30 个,处理方式完全一致,一次运行全部完成
  • 保留格式 - 工作表连同单元格样式、公式等内容一起复制,避免手工粘贴导致格式错乱
  • 流程可复用 - 合并逻辑可以封装成脚本,每月、每周定时执行,形成稳定的数据汇总流程

环境准备

本文使用 Spire.XLS for Python 库,安装命令如下:

bash 复制代码
pip install Spire.XLS

合并多个 Excel 文件

合并的核心思路是:创建一个新的工作簿作为目标,然后循环加载每个源文件,把其中的工作表逐一复制到目标工作簿中。AddCopy 方法负责复制工作表,第二个参数 WorksheetCopyType.CopyAll 表示连同数据、格式、公式等全部内容一起复制。

python 复制代码
from spire.xls import *
from spire.xls.common import *

# 待合并的文件列表
files = ["Sales_January.xlsx", "Sales_February.xlsx", "Sales_March.xls"]

# 创建目标工作簿,并指定版本
newbook = Workbook()
newbook.Version = ExcelVersion.Version2013

# 清空默认工作表,避免合并结果中出现空白表
newbook.Worksheets.Clear()

# 临时工作簿,用于逐个加载源文件
tempbook = Workbook()

for file in files:
    # 加载源文件
    tempbook.LoadFromFile(file)
    # 将源文件中的每个工作表复制到目标工作簿
    for sheet in tempbook.Worksheets:
        newbook.Worksheets.AddCopy(sheet, WorksheetCopyType.CopyAll)

# 保存合并结果
newbook.SaveToFile("Merged.xlsx", ExcelVersion.Version2013)

newbook.Dispose()
tempbook.Dispose()

几个关键点:

  • Workbook() 创建的新工作簿默认带有一个名为 "Sheet1" 的空工作表,调用 Worksheets.Clear() 将其移除,保证最终文件里只有真正合并进来的数据
  • LoadFromFile 会根据文件内容自动识别 .xlsx 和 .xls 格式,混合格式的文件也可以放在一起处理
  • 每次循环都会重新加载文件覆盖 tempbook 的内容,因此无论合并多少文件,内存中始终只保留一份源数据
  • 合并后的工作表会保留原来的名称和顺序,方便识别数据来源

合并指定的工作表

有时只需要合并每个文件中的部分工作表,而不是全部。由于 AddCopy 的第一个参数接收的是工作表对象,可以先通过索引取出需要的表,再决定复制哪些:

python 复制代码
from spire.xls import *
from spire.xls.common import *

newbook = Workbook()
newbook.Worksheets.Clear()
tempbook = Workbook()

# 加载第一个源文件
tempbook.LoadFromFile("Sales_January.xlsx")

# 只复制前两个工作表
newbook.Worksheets.AddCopy(tempbook.Worksheets[0], WorksheetCopyType.CopyAll)
newbook.Worksheets.AddCopy(tempbook.Worksheets[1], WorksheetCopyType.CopyAll)

newbook.SaveToFile("MergedSelected.xlsx", ExcelVersion.Version2013)
newbook.Dispose()
tempbook.Dispose()

这种按索引选取的方式适合文件结构固定的场景。如果源文件较多且结构统一,也可以结合判断逻辑只复制满足条件的工作表,例如只复制包含特定关键字的表,实现有选择地合并。

实用技巧

用 glob 自动收集文件列表

手动写死文件列表在文件数量多时不方便,可以借助 Python 标准库的 glob 按模式匹配文件:

python 复制代码
import glob

files = glob.glob("./reports/*.xlsx") + glob.glob("./reports/*.xls")

这样只要把文件放到指定目录,脚本就会自动收集全部需要合并的文件,新增文件也无需改动代码。

控制输出版本

保存时通过 ExcelVersion 枚举控制输出格式:Version2013 生成 .xlsx 文件,Version2010 兼容 Excel 2010 及更新版本。如果合并结果需要发给使用旧版 Excel 的同事,选择较低的版本更稳妥。

及时释放资源

Workbook 对象占用系统资源。在批量处理场景中,处理完成后调用 Dispose() 释放对象,可以避免长时间运行时内存持续增长。

总结

本文介绍了如何使用 Python 合并多个 Excel 文件:先创建目标工作簿并清空默认工作表,再循环加载源文件,通过 AddCopy 将工作表完整复制到目标工作簿,最后保存结果。这套流程适用于报表汇总、数据归档等常见场景,能够把分散的数据集中到一个文件中。

在此基础上,还可以在合并前后对工作表进行排序、筛选或格式设置,构建更完整的 Excel 自动化处理方案。

相关推荐
ttwuai10 小时前
Go 后台接入 SSO 后菜单正常但接口 403,怎么排查权限链路?
开发语言·后端·golang
zmzb010310 小时前
Python课后习题训练记录Day194
python·opencv·计算机视觉
benchmark_cc11 小时前
批量获取量化数据时,如何设置合理的超时和重试机制?——QuantDash 高性能实战指南
开发语言·人工智能·python·pandas·量化·quantdash
2601_9669496511 小时前
使用 Pandas 读取批量数据时如何避免内存溢出?QuantDash 量化数据工程师避坑指南
开发语言·python·pandas·tushare·akshare·quantdash
65岁退休Coder11 小时前
LangChain v1.3.4 笔记 - 08 MCP & 相关概念
后端·python·langchain
郑州光合科技余经理11 小时前
海外版多语言团购系统架构:主数据互通与核销边界
java·开发语言·前端·后端·系统架构·php·ai编程
wdloumiga11 小时前
使用 Construct 3零基础做一些2D小游戏
python·游戏·游戏2d
vipxieliang12 小时前
ValidX 的 Date 和 DateTime vs JPA 的 Temporal 对比
java·后端
触底反弹12 小时前
🔥 从「为什么」到「怎么用」:TypeScript 类型约束与泛型完全指南
后端·面试·typescript
用户83562907805112 小时前
使用 Python 查找和替换 Word 文档中的文本
后端·python