鱼C论坛

 找回密码
 立即注册
查看: 1544|回复: 9

[已解决]Python 处理Excel多个工作表合并一个工作表,从第二行开始合并,只保留首个表头

[复制链接]
发表于 2023-11-23 15:07:50 | 显示全部楼层 |阅读模式

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

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

x
Python 处理Excel多个工作表合并一个工作表,从第二行开始合并,并且只保留首个表头,代码如何写?
最佳答案
2023-11-23 15:24:32
冰菲 发表于 2023-11-23 15:23
path='C:/Users/EDY/Desktop/文件'
files_list=os.li ...

根据你提供的代码和要求,你可以尝试以下修改。在循环处理每个表格之前,先添加一个条件判断来决定是否给新表格添加首个表头。如果是第一个表格,将表头也写入新表格,如果是后续的表格,则跳过表头。以下是修改后的代码示例:
from openpyxl import load_workbook, Workbookimport ospath = 'C:/Users/EDY/Desktop/文件'files_list = os.listdir(path)new_wb = Workbook()  # 新建表格new_ws = new_wb.active  # 获取工作簿for i, file in enumerate(files_list):    file_path = path + '/' + file    wb = load_workbook(file_path)    ws = wb.active        for j, row in enumerate(ws.iter_rows(min_row=1 if i == 0 else 2, values_only=True)):        if i == 0 or j > 0:  # 第一个表格或后续表格中的非首行数据            new_ws.append(row)new_wb.save("最终完整版/2023.11.23.xlsx")  # 保存表格
这段代码会在新表格中合并所有工作簿的数据,并且只保留首个表头。请确保你已经安装了openpyxl库,可使用`pip install openpyxl`命令进行安装。注意,如果从第二行开始合并,那么合并后的表格将没有表头行。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-23 15:08:26 | 显示全部楼层
你可以使用Python中的pandas库来实现这个功能。首先,需要安装pandas库,可使用以下命令进行安装:
pip install pandas
接下来,可以使用以下代码来合并多个工作表并保留首个表头:
import pandas as pd# 读取第一个工作表,获取表头df_first = pd.read_excel('your_file_name.xlsx', sheet_name=0, header=0)# 合并后续工作表dfs = pd.read_excel('your_file_name.xlsx', sheet_name=range(1, None))df_merged = pd.concat(dfs, ignore_index=True)# 将合并后的数据写入新的工作表with pd.ExcelWriter('merged_file.xlsx') as writer:    df_first.to_excel(writer, index=False, sheet_name='merged_sheet')    df_merged.to_excel(writer, index=False, startrow=1, header=False, sheet_name='merged_sheet')
将你的Excel文件名替换为`your_file_name.xlsx`,执行以上代码后,将会生成一个名为`merged_file.xlsx`的新文件,其中包含合并后的工作表。合并后的工作表将从第二行开始,并且只保留首个表头。

请确保已经安装了pandas库,若未安装可通过运行`pip install pandas`进行安装。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-23 15:21:17 | 显示全部楼层
FishC_GPT 发表于 2023-11-23 15:08
你可以使用Python中的pandas库来实现这个功能。首先,需要安装pandas库,可使用以下命令进行安装:

不能单独选择文件名,一个文件夹里面有上百个工作簿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-23 15:21:54 | 显示全部楼层
冰菲 发表于 2023-11-23 15:21
不能单独选择文件名,一个文件夹里面有上百个工作簿

如果你想合并一个文件夹里的上百个工作簿,可以使用Python的os库来获取文件夹中的所有Excel文件。以下是一个示例代码:
import osimport pandas as pd# 设置文件夹路径folder_path = 'your_folder_path'# 读取文件夹中的所有Excel文件all_files = os.listdir(folder_path)excel_files = [file for file in all_files if file.endswith('.xlsx')]# 创建一个空的DataFrame用于存储合并后的数据merged_data = pd.DataFrame()# 遍历每个Excel文件,合并数据for file in excel_files:    file_path = os.path.join(folder_path, file)    df = pd.read_excel(file_path, header=1) # 从第二行开始读取数据,保留首个表头    merged_data = merged_data.append(df)# 将合并后的数据写入新的工作簿merged_file_path = os.path.join(folder_path, 'merged_file.xlsx')with pd.ExcelWriter(merged_file_path) as writer:    merged_data.to_excel(writer, index=False, sheet_name='merged_sheet')print('合并完成!')
请将代码中的`your_folder_path`替换为你想要合并的文件夹的路径,并确保文件夹中只包含Excel文件。执行以上代码后,将会在指定的文件夹中生成一个名为`merged_file.xlsx`的新文件,其中包含了合并后的工作表数据。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-23 15:23:51 | 显示全部楼层
path='C:/Users/EDY/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):    #  循环获取表头以外的表格内容,从第15行开始
        new_ws.append(row)    #  获取的内容写入新表

new_wb.save("最终完整版/2023.11.23.xlsx")    #  保存表格


如果从第二行开始,就没有抬头,如果从第一行开始,合并后有多个抬头
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-23 15:24:32 | 显示全部楼层    本楼为最佳答案   
冰菲 发表于 2023-11-23 15:23
path='C:/Users/EDY/Desktop/文件'
files_list=os.li ...

根据你提供的代码和要求,你可以尝试以下修改。在循环处理每个表格之前,先添加一个条件判断来决定是否给新表格添加首个表头。如果是第一个表格,将表头也写入新表格,如果是后续的表格,则跳过表头。以下是修改后的代码示例:
from openpyxl import load_workbook, Workbookimport ospath = 'C:/Users/EDY/Desktop/文件'files_list = os.listdir(path)new_wb = Workbook()  # 新建表格new_ws = new_wb.active  # 获取工作簿for i, file in enumerate(files_list):    file_path = path + '/' + file    wb = load_workbook(file_path)    ws = wb.active        for j, row in enumerate(ws.iter_rows(min_row=1 if i == 0 else 2, values_only=True)):        if i == 0 or j > 0:  # 第一个表格或后续表格中的非首行数据            new_ws.append(row)new_wb.save("最终完整版/2023.11.23.xlsx")  # 保存表格
这段代码会在新表格中合并所有工作簿的数据,并且只保留首个表头。请确保你已经安装了openpyxl库,可使用`pip install openpyxl`命令进行安装。注意,如果从第二行开始合并,那么合并后的表格将没有表头行。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-23 15:33:06 | 显示全部楼层
for j, row in enumerate(ws.iter_rows(min_row=1 if i == 0 else 2, values_only=True)):


1和2改0和1就对了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-23 15:33:52 | 显示全部楼层
冰菲 发表于 2023-11-23 15:33
for j, row in enumerate(ws.iter_rows(min_row=1 if  ...

非常抱歉,之前的代码有一处错误。根据你的要求,需要将代码中的1和2改为0和1。以下是修改后的代码示例:from openpyxl import load_workbook, Workbookimport ospath = 'C:/Users/EDY/Desktop/文件'files_list = os.listdir(path)new_wb = Workbook()  # 新建表格new_ws = new_wb.active  # 获取工作簿for i, file in enumerate(files_list):    file_path = path + '/' + file    wb = load_workbook(file_path)    ws = wb.active        for j, row in enumerate(ws.iter_rows(min_row=0 if i == 0 else 1, values_only=True)):        if i == 0 or j > 0:  # 第一个表格或后续表格中的非首行数据            new_ws.append(row)new_wb.save("最终完整版/2023.11.23.xlsx")  # 保存表格现在代码中,如果是第一个表格,将从第0行开始读取数据,并且保留首个表头。如果是后续的表格,将从第1行开始读取数据,并且跳过表头。最终合并后的表格将只保留首个表头。再次对之前的错误表示抱歉,并感谢你的指正。希望这次的代码修改能满足你的需求。请确保已经安装了openpyxl库,可使用`pip install openpyxl`命令进行安装。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-23 16:04:57 | 显示全部楼层
没事,我改完就可以运行了 ,也谢谢你提供的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-23 16:05:09 | 显示全部楼层
冰菲 发表于 2023-11-23 16:04
没事,我改完就可以运行了 ,也谢谢你提供的代码

不客气!很高兴能够帮到你。如果还有其他问题,欢迎随时提问。祝你编程愉快!
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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