影刀RPA 多个Excel文件合并与拆分:按条件拆表、按Sheet合并 影刀RPA 多个Excel文件合并与拆分按条件拆表、按Sheet合并采集数据最常见的两个需求把几十个小Excel合并成一个大的或者把一个大的按条件拆成多个小的。这篇把两种场景讲透附带可以直接用的代码模板。场景一多个Excel文件合并典型场景每天采集一份Excel一周后需要把7份日报合并成一份周报。或者从不同部门收上来的Excel按统一格式合并。合并前先确认的事打开两个文件看一眼表头一样吗不同人做的Excel表头可能略有差异“销售额” vs “销售金额”。不一样就需要做列名映射。列顺序一样吗表头相同但列的排列顺序可能不同。合并时要按列名匹配而不是按列序号。数据类型一致吗同一列在不同文件里有的是数字有的是文本。合并前统一格式。Python合并代码importosimportpandasaspd folderrC:\RPA_data\daily_reportsall_data[]forfilenameinos.listdir(folder):ifnotfilename.endswith(.xlsx):continuefilepathos.path.join(folder,filename)# 读取每个Excel的第一个Sheetdfpd.read_excel(filepath)[video(video-KTjYNkex-1784019066364)(type-csdn)(url-https://live.csdn.net/v/embed/525010)(image-https://v-blog.csdnimg.cn/asset/f4faa587144cb7070f19e8b36813806b/cover/Cover0.jpg)(title-店群矩阵自动化突破运营极限)]# 添加来源列方便追溯数据来自哪个文件df[来源文件]filename all_data.append(df)print(f已加载{filename}{len(df)}行)# 合并mergedpd.concat(all_data,ignore_indexTrue)# 保存merged.to_excel(rC:\RPA_data\weekly_report.xlsx,indexFalse)print(f合并完成共{len(merged)}行)合并多个Sheet如果一个Excel文件有多个Sheet每个Sheet的数据结构一样importpandasaspd filepathrC:\RPA_data\monthly_data.xlsxxlspd.ExcelFile(filepath)all_data[]forsheet_nameinxls.sheet_names:dfpd.read_excel(filepath,sheet_namesheet_name)df[来源Sheet]sheet_name all_data.append(df)mergedpd.concat(all_data,ignore_indexTrue)merged.to_excel(rC:\RPA_data\merged.xlsx,indexFalse)表头不一致时的处理如果两个文件的列名不完全一致做一个列名映射# 标准列名映射column_mapping{销售额:[销售额,销售金额,营收],客户名:[客户名,客户名称,客户],日期:[日期,交易日期,时间],}defnormalize_columns(df,mapping):rename_dict{}forstandard_name,aliasesinmapping.items():forcolindf.columns:ifcolinaliases:rename_dict[col]standard_namebreakreturndf.rename(columnsrename_dict)# 两个文件的列名不同df_apd.read_excel(部门A.xlsx)# 列名销售金额、客户df_bpd.read_excel(部门B.xlsx)# 列名销售额、客户名称df_anormalize_columns(df_a,column_mapping)df_bnormalize_columns(df_b,column_mapping)# 现在列名统一了可以合并mergedpd.concat([df_a,df_b],ignore_indexTrue)场景二一个Excel按条件拆分典型场景采集了全公司的销售数据需要按省份拆成多个文件发给各个区域经理。按某一列的值拆分importpandasaspdimportos dfpd.read_excel(rC:\RPA_data\all_sales.xlsx)output_dirrC:\RPA_data\by_provinceos.makedirs(output_dir,exist_okTrue)# 按省份列拆分forprovince,group_dfindf.groupby(省份):# 清理文件名中的非法字符safe_namestr(province).replace(/,_).replace(\\,_)output_pathos.path.join(output_dir,f销售数据_{safe_name}.xlsx)group_df.to_excel(output_path,indexFalse)print(f{province}{len(group_df)}行 →{output_path})print(拆分完成)按数据量拆分每N行一个文件发给别人时避免单文件太大每5000行拆一个importpandasaspdimportmath dfpd.read_excel(rC:\RPA_data\large_data.xlsx)rows_per_file5000total_filesmath.ceil(len(df)/rows_per_file)foriinrange(total_files):starti*rows_per_file endstartrows_per_file ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4c838af273664d39a8b02be308a1da23.png#pic_center)chunkdf.iloc[start:end]output_pathrfC:\RPA_data\split\part_{i1:03d}.xlsxchunk.to_excel(output_path,indexFalse)print(fPart{i1}第{start1}-{min(end,len(df))}行)print(拆分完成)按多条件拆分比如按省份年份一起拆# 先用groupby的多条件for(province,year),group_dfindf.groupby([省份,年份]):filenamef销售数据_{province}_{year}.xlsxgroup_df.to_excel(filename,indexFalse)场景三从多个Sheet按条件汇总一个Excel里有12个Sheet每月一个需要汇总全年数据。importpandasaspd filepathrC:\RPA_data\annual_data.xlsxsummary{month:[],total_sales:[],order_count:[],}formonthinrange(1,13):sheet_namef{month}月try:dfpd.read_excel(filepath,sheet_namesheet_name)except:print(f{sheet_name}不存在跳过)continuesummary[month].append(f{month}月)summary[total_sales].append(df[金额].sum())summary[order_count].append(len(df))summary_dfpd.DataFrame(summary)summary_df.to_excel(rC:\RPA_data\annual_summary.xlsx,indexFalse)temu店群自动化报活动案例影刀流程中的合并拆分策略如果数据量不大几千行以内可以用影刀内置的【读取Excel】和【写入Excel】来实现合并合并流程 1. 创建空列表 all_data 2. FOR EACH file IN 文件列表: 【读取Excel】→ 读取当前文件 → temp_data FOR EACH row IN temp_data: 将 row 加入 all_data END FOR 3. END FOR 4. 【写入Excel】→ all_data → 合并后的文件但数据量超过几千行时影刀内置动作逐行遍历会很慢。这时候切到Python节点用pandas一次性处理效率高一个数量级。合并时的数据验证合并完后别急着交差验证一下importpandasaspd original_files[fileA.xlsx,fileB.xlsx,fileC.xlsx]merged_filemerged.xlsx# 验证原始文件总行数 合并后行数total_original0forfinoriginal_files:dfpd.read_excel(f)total_originallen(df)mergedpd.read_excel(merged_file)iflen(merged)total_original:print(f✅ 验证通过{total_original}行)else:print(f❌ 行数不匹配原始{total_original}合并{len(merged)})这个验证很重要——合并过程中可能有行被意外丢弃或重复计算。总结合并用pandas.concat拆分用groupby循环写入。数据量小用影刀内置动作数据量大切Python节点。合并完做行数验证确保数据没丢。作者林焱