鱼C论坛

 找回密码
 立即注册
查看: 19|回复: 1

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

[复制链接]
发表于 4 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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")    #  保存表格
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 4 小时前 | 显示全部楼层
你的代码在合并时跳过了每个工作表的第一行(表头),所以合并后的新表没有表头。要保留表头,可以这样修改:

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

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

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

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


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

  5. # 先获取第一个文件的表头
  6. first_file_path = path+'/'+files_list[0]
  7. first_wb = load_workbook(first_file_path)
  8. first_ws = first_wb.active
  9. header = [cell.value for cell in next(first_ws.iter_rows(min_row=1, max_row=1))]

  10. # 写入表头
  11. new_ws.append(header)

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

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


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-23 19:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表