冰菲 发表于 2026-1-23 15:16:41

python 批量合并多个工作表,从第二行开始,为什么表头没有了

path='C:/Users/Administrator/Desktop/无密文件'
files_list=os.listdir(path)    #获取目标文件夹内各文件的名称
new_wb=Workbook()    #新建表格
new_ws=new_wb.active    #获取工作簿
for file in files_list:    #循环获取各表的名称
    file_path=path+'/'+file    #获取表格的路径
    wb=load_workbook(file_path)    #打开表格
    ws=wb.active    #打开工作簿
    for row in ws.iter_rows(min_row=2,values_only=True):    #循环获取表头以外的表格内容,从第2行开始
      new_ws.append(row)    #获取的内容写入新表
new_wb.save("最终完整版/1(多工作簿合并一个工作表) .xlsx")    #保存表格

FishC 发表于 2026-1-23 15:17:27

你的代码在合并时跳过了每个工作表的第一行(表头),所以合并后的新表没有表头。要保留表头,可以这样修改:

修改方案1:保留第一个文件的表头
path='C:/Users/Administrator/Desktop/无密文件'
files_list=os.listdir(path)
new_wb=Workbook()
new_ws=new_wb.active

first_file = True# 标记是否为第一个文件

for file in files_list:
    file_path=path+'/'+file
    wb=load_workbook(file_path)
    ws=wb.active
   
    if first_file:# 如果是第一个文件
      # 读取所有行,包括表头
      for row in ws.iter_rows(values_only=True):
            new_ws.append(row)
      first_file = False
    else:# 其他文件跳过表头
      for row in ws.iter_rows(min_row=2, values_only=True):
            new_ws.append(row)

new_wb.save("最终完整版/1 (多工作簿合并一个工作表).xlsx")


修改方案2:手动添加表头
如果所有文件的表头相同,可以先读取一个文件的表头:
path='C:/Users/Administrator/Desktop/无密文件'
files_list=os.listdir(path)
new_wb=Workbook()
new_ws=new_wb.active

# 先获取第一个文件的表头
first_file_path = path+'/'+files_list
first_wb = load_workbook(first_file_path)
first_ws = first_wb.active
header =

# 写入表头
new_ws.append(header)

# 合并所有文件的数据(包括第一个文件)
for file in files_list:
    file_path=path+'/'+file
    wb=load_workbook(file_path)
    ws=wb.active
    for row in ws.iter_rows(min_row=2, values_only=True):
      new_ws.append(row)

new_wb.save("最终完整版/1 (多工作簿合并一个工作表).xlsx")


主要修改:
1. 方案1使用 first_file 标志区分第一个文件和其他文件
2. 方案2先单独读取表头,然后合并所有文件时都从第2行开始

建议使用方案1,更简洁且能处理表头不完全相同的情况。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: python 批量合并多个工作表,从第二行开始,为什么表头没有了