You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python将多个Excel工作簿合并为包含所有工作表的单个工作簿

Excel多工作簿合并(保留全部工作表)解决方案

报错原因说明

  • 环境依赖问题:你当前使用的Python 2.7 + xlwt组件组合存在兼容性限制,xlwt仅支持生成后缀为.xls的旧版Excel文件,且你在调用writer.save()前没有成功将任何工作表写入到Writer对象中,导致内部工作表列表为空,访问激活工作表索引时抛出越界错误
  • 逻辑遗漏问题:你参考的代码默认仅合并每个工作簿的第一个工作表,不会自动读取全部4个工作表,这是无法得到32个完整工作表的核心原因

正确实现步骤

  • 第一步:升级环境到Python3.6+,安装依赖:pip install pandas openpyxl,openpyxl支持新版xlsx格式,无工作表数量限制,兼容性更好
  • 第二步:遍历所有待合并的Excel工作簿,逐个读取每个工作簿下的全部工作表
  • 第三步:设置工作表命名规则(如「原工作簿文件名_原工作表名」),避免同一工作簿内出现重名工作表
  • 第四步:全部工作表写入完毕后再保存输出文件

可直接运行的代码示例

import pandas as pd
import os

# 配置参数
input_dir = "./excel_files/"  # 存放8个待合并Excel文件的文件夹路径
output_path = "./merged_result.xlsx"  # 合并后文件的输出路径

# 初始化Excel写入器
with pd.ExcelWriter(output_path, engine="openpyxl") as writer:
    # 遍历文件夹下所有Excel文件
    for filename in os.listdir(input_dir):
        if filename.endswith((".xlsx", ".xls")) and not filename.startswith("~$"):
            file_path = os.path.join(input_dir, filename)
            # 读取当前工作簿的全部工作表
            excel_file = pd.ExcelFile(file_path)
            for sheet_name in excel_file.sheet_names:
                # 读取单个工作表数据
                df = excel_file.parse(sheet_name)
                # 生成新的工作表名,避免重名:原文件名(去掉后缀)+ 原工作表名
                new_sheet_name = f"{os.path.splitext(filename)[0]}_{sheet_name}"
                # Excel要求工作表名最大长度为31字符,超出部分截断
                new_sheet_name = new_sheet_name[:31]
                # 将工作表写入合并文件
                df.to_excel(writer, sheet_name=new_sheet_name, index=False)

之前遗漏的核心步骤

  • 没有配置读取全部工作表的逻辑,仅读取了每个工作簿的默认第一个工作表
  • 使用了兼容性差的xlwt组件,且代码逻辑存在缺陷,导致没有任何工作表成功写入就调用了保存方法
  • 没有处理重名工作表的问题,Excel要求同一工作簿内工作表名不能重复,且长度不能超过31字符

内容的提问来源于stack exchange,提问作者linux01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:45:02