|
|
你的代码在合并时跳过了每个工作表的第一行(表头),所以合并后的新表没有表头。要保留表头,可以这样修改:
修改方案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[0]
- first_wb = load_workbook(first_file_path)
- first_ws = first_wb.active
- header = [cell.value for cell in next(first_ws.iter_rows(min_row=1, max_row=1))]
- # 写入表头
- 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 小助理,如未能正确解答您的问题,请继续追问。 |
|