如何用openpyxl将多个xlsx文件合并为含不同工作表的单个xlsx文件
问题描述
需要将列表中的多个xlsx文件合并为一个文件,要求每个工作表以对应的源文件名命名。已知单个xlsx文件仅包含一个存储行列数据的工作表,使用openpyxl库进行操作。提供的文件列表如下:
xlsx_files = ['u_gen_inf.xlsx', 'u_dates_inf.xlsx', 'u_ctrl_inf.xlsx']
希望编写通用循环逻辑(不受文件数量限制),初始代码框架如下:
from openpyxl import load_workbook, Workbook for f in xlsx_files: ? load_workbook() - universal code independent of the number of xlsx files wb_master.save('master_users_inf.xlsx')
解决方案
以下是满足需求的完整通用代码:
from openpyxl import load_workbook, Workbook # 创建主工作簿 wb_master = Workbook() # 删除默认生成的空白工作表,避免冗余 wb_master.remove(wb_master.active) for f in xlsx_files: # 加载源文件工作簿 wb_source = load_workbook(f) # 获取源文件的唯一工作表 ws_source = wb_source.active # 提取文件名(去掉.xlsx后缀)作为新工作表名称 sheet_name = f.replace('.xlsx', '') # 在主工作簿中创建对应名称的新工作表 ws_new = wb_master.create_sheet(title=sheet_name) # 逐行复制源工作表的数据到新工作表 for row in ws_source.iter_rows(values_only=True): ws_new.append(row) # 保存合并后的主工作簿 wb_master.save('master_users_inf.xlsx')
代码说明
- 先创建主工作簿并删除默认空白工作表,避免最终文件出现无意义的初始工作表。
- 循环处理每个源文件时:
- 直接加载源工作簿并获取唯一的活动工作表。
- 用源文件名(去除后缀)作为新表名称,保证工作表与源文件一一对应。
- 通过
iter_rows(values_only=True)高效读取源表数据,逐行追加到新工作表中。
- 最后保存合并完成的主工作簿。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

