如何用Python将拆分出的对应Excel文件合并为含双工作表的单个Excel文件
合并按STYLE拆分后的独立Excel文件为双工作表文件
问题场景
原本需求是将包含「包装要求」和「数据」两个工作表的Excel文件2023.2.7RFID125款.xlsx,按STYLE列拆分——每个不同的STYLE值对应生成一个包含上述两个工作表的独立Excel文件。但执行以下拆分代码后,两个工作表被单独拆分,生成了两类独立文件:包装要求{STYLE}.xlsx和数据{STYLE}.xlsx。
原拆分代码:
import pandas as pd df1 = pd.read_excel("2023.2.7RFID125款.xlsx",converters={"BARCODE":str,"SKU":str},sheet_name=0) nodeDataList = list(df1.groupby(['STYLE'])) for nodeData in nodeDataList: nodeData[1].to_excel('包装要求'+ str(nodeData[0])+ '.xlsx', sheet_name='包装要求', index=False)# index=False输出不显示索引值 df2 = pd.read_excel("2023.2.7RFID125款.xlsx",converters={"BARCODE":str,"SKU":str},sheet_name=1) nodeDataList = list(df2.groupby(['STYLE'])) for nodeData in nodeDataList: nodeData[1].to_excel('数据' + str(nodeData[0])+ '.xlsx',sheet_name='数据', index=False)
现在需要将对应同一STYLE的包装要求{STYLE}.xlsx和数据{STYLE}.xlsx合并为一个新Excel文件,其中包含两个工作表:「包装要求」(对应前者内容)、「数据」(对应后者内容)。
解决方案代码
import pandas as pd import os # 筛选当前目录下所有"包装要求"开头的Excel文件 pack_files = [file for file in os.listdir('.') if file.startswith('包装要求') and file.endswith('.xlsx')] for pack_file in pack_files: # 从文件名提取对应的STYLE值 style = pack_file.replace('包装要求', '').rstrip('.xlsx') data_file = f'数据{style}.xlsx' # 检查对应的数据文件是否存在,避免报错 if not os.path.isfile(data_file): print(f"跳过:未找到{data_file},对应STYLE为{style}") continue # 读取文件,保持BARCODE和SKU为字符串类型(与原拆分代码一致) df_pack = pd.read_excel(pack_file, converters={"BARCODE": str, "SKU": str}) df_data = pd.read_excel(data_file, converters={"BARCODE": str, "SKU": str}) # 写入合并后的Excel文件 with pd.ExcelWriter(f'{style}_合并文件.xlsx') as writer: df_pack.to_excel(writer, sheet_name='包装要求', index=False) df_data.to_excel(writer, sheet_name='数据', index=False) print(f"合并完成:{style}_合并文件.xlsx")
代码说明
- 自动筛选所有拆分后的「包装要求」文件,无需手动指定STYLE值
- 通过文件名匹配对应「数据」文件,确保STYLE一致性
- 增加文件存在检查,避免因缺失文件导致程序崩溃
- 保留
converters参数,保证BARCODE、SKU等字段的字符串格式不丢失 - 使用
pd.ExcelWriter实现单文件多工作表的写入,符合最初的需求
内容的提问来源于stack exchange,提问作者高汤娃娃菜
相关产品推荐
相关产品推荐

