使用Python将多个Excel文件合并为单个文件的问题咨询
多Excel文件合并解决方案
原有代码问题排查
- 导入别名不一致:代码开头导入
pandas时取了别名pd,后续调用ExcelFile、concat等方法时混用了pandas全名和pd别名,会触发命名未定义报错 - 无效冗余代码:
pd.read_excel(excel_names, engine='openpyxl')既没有赋值接收返回结果,也不支持直接传入文件路径列表,属于无效代码 - 变量未定义:最后一行的
excl_merged变量没有提前声明,你之前合并后的结果存储在combined变量中,这行是冗余错误代码 - 逻辑未匹配需求:当前代码只读取了每个Excel文件的第一个工作表,如果需要合并单个文件内的多个工作表,需要调整读取逻辑
修复后可运行代码
场景1:每个Excel文件只有1个工作表,合并所有文件的第一个工作表
import pandas as pd # 填入你要合并的所有Excel文件路径 excel_names = ["/tmp/xlsx1.xlsx", "/tmp/xlsx2.xlsx", "/tmp/xlsx3.xlsx"] excels = [pd.ExcelFile(name, engine='openpyxl') for name in excel_names] # 读取每个文件的第一个工作表,header=None表示不把第一行认作表头 frames = [x.parse(x.sheet_names[0], header=None, index_col=None) for x in excels] # 去掉除第一个文件外其他文件的表头(如果所有文件表头一致需要去重的话保留这行,不需要就删除) frames[1:] = [df[1:] for df in frames[1:]] # 纵向拼接所有表格 combined = pd.concat(frames) # 导出合并结果,header=False表示不写入表头,和前面的读取逻辑对应 combined.to_excel("total_food_sales.xlsx", header=False, index=False, engine='openpyxl')
场景2:需要合并所有Excel文件内的所有工作表
import pandas as pd excel_names = ["/tmp/xlsx1.xlsx", "/tmp/xlsx2.xlsx", "/tmp/xlsx3.xlsx"] frames = [] for excel_path in excel_names: xls = pd.ExcelFile(excel_path, engine='openpyxl') # 读取当前Excel的所有工作表 for sheet_name in xls.sheet_names: df = xls.parse(sheet_name, header=None, index_col=None) frames.append(df) # 去重表头逻辑,不需要可以删除 frames[1:] = [df[1:] for df in frames[1:]] combined = pd.concat(frames) combined.to_excel("total_food_sales.xlsx", header=False, index=False, engine='openpyxl')
注意事项
- 运行前请先安装依赖:
pip install pandas openpyxl - 如果你的表格第一行就是数据不需要做表头处理,删除
frames[1:] = [df[1:] for df in frames[1:]]这行,同时把to_excel的header参数改为True即可
内容的提问来源于stack exchange,提问作者VINOD S
相关产品推荐
相关产品推荐

