影刀RPA Excel多表合并:跨文件跨Sheet数据整合

title: “影刀RPA Excel多表合并:跨文件跨Sheet数据整合”
date: 2026-07-01
author: 林焱

影刀RPA Excel多表合并:跨文件跨Sheet数据整合

每个分公司提交一个Excel,每个月一个文件,每个人一个Sheet……汇总的时候要一个个打开复制,费时费力还容易出错。影刀一键合并所有文件,5分钟的活变成30秒。

什么情况用什么

必须用合并功能的场景:

  • 多个分公司提交相同格式的报表,需要合并

  • 同一文件有多个Sheet,需要合并成一张表

  • 历史数据按月存放,需要合并做年度分析

  • 多系统导出的数据格式相同,需要汇总

不适合的场景:

  • 每个文件格式都不一样,合并前需要大量清洗
  • 文件数量很少(2-3个),手动复制更快

怎么做

拼多多店群自动化报活动上架!

方法1:合并同一文件夹内所有Excel(最常用)

【影刀操作】

  1. 新建流程「Excel文件夹合并」
  2. 添加【Python】指令
    importpandasaspdimportosimportglob folder_path=r'C:\分公司报表\2024年6月'output_path=r'C:\汇总报表\2024年6月汇总.xlsx'# 找到所有Excel文件excel_files=glob.glob(os.path.join(folder_path,'*.xlsx'))excel_files+=glob.glob(os.path.join(folder_path,'*.xls'))ifnotexcel_files:raiseFileNotFoundError(f'未找到Excel文件:{folder_path}')print(f'找到{len(excel_files)}个文件')all_dfs=[]failed_files=[]forfile_pathinexcel_files:filename=os.path.basename(file_path)try:df=pd.read_excel(file_path,sheet_name=0)# 读取第一个Sheet# 过滤空行df.dropna(how='all',inplace=True)# 添加来源文件名列,便于追踪df['来源文件']=filename all_dfs.append(df)print(f' 已读取:{filename}{len(df)}行')exceptExceptionase:print(f' 读取失败:{filename},原因:{e}')failed_files.append(filename)ifnotall_dfs:raiseValueError('没有成功读取任何文件')# 合并所有数据merged_df=pd.concat(all_dfs,ignore_index=True)# 去重(按关键字段)# merged_df.drop_duplicates(subset=['订单编号'], keep='first', inplace=True)print(f'合并完成:共{len(merged_df)}行')# 保存merged_df.to_excel(output_path,index=False,sheet_name='汇总数据')# 保存失败文件列表iffailed_files:error_info='\n'.join(failed_files)print(f'以下文件读取失败:\n{error_info}')yda.set_variable('merge_count',len(merged_df))yda.set_variable('failed_files',str(failed_files))

方法2:合并同一文件的多个Sheet

【影刀操作】

  1. 添加【Python】指令
    importpandasaspd file_path=r'C:\报表\各部门年度数据.xlsx'# 读取所有Sheetexcel_file=pd.ExcelFile(file_path)sheet_names=excel_file.sheet_namesprint(f'共有{len(sheet_names)}个Sheet:{sheet_names}')# 排除汇总Sheet(如果有的话)data_sheets=[sforsinsheet_namesifsnotin['总汇总','说明','README']]all_dfs=[]forsheet_nameindata_sheets:df=pd.read_excel(file_path,sheet_name=sheet_name,header=0)df.dropna(how='all',inplace=True)iflen(df)==0:print(f' 跳过空Sheet:{sheet_name}')continuedf['Sheet来源']=sheet_name all_dfs.append(df)print(f' Sheet{sheet_name}{len(df)}行')merged=pd.concat(all_dfs,ignore_index=True)# 写回到原文件的新Sheetwithpd.ExcelWriter(file_path,engine='openpyxl',mode='a',if_sheet_exists='replace')aswriter:merged.to_excel(writer,sheet_name='总汇总',index=False)print(f'合并完成,共{len(merged)}行,已写入"总汇总"Sheet')

方法3:按月自动汇总历史数据

【影刀操作】

  1. 添加【Python】指令
    importpandasaspdimportos# 合并2024年全年数据base_folder=r'C:\月度报表'months=[f'2024年{m}月'forminrange(1,13)]all_dfs=[]formonthinmonths:month_folder=os.path.join(base_folder,month)ifnotos.path.exists(month_folder):print(f'目录不存在:{month_folder},跳过')continueforfilenameinos.listdir(month_folder):ifnotfilename.endswith(('.xlsx','.xls')):![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/87e6f570794a45949f4d756efaceb880.png#pic_center)continuefile_path=os.path.join(month_folder,filename)try:df=pd.read_excel(file_path)df['月份']=month df['来源']=filename all_dfs.append(df)exceptExceptionase:print(f'读取失败:{file_path}{e}')ifall_dfs:annual_df=pd.concat(all_dfs,ignore_index=True)annual_df.to_excel(r'C:\月度报表\2024年全年汇总.xlsx',index=False)print(f'年度汇总完成:共{len(annual_df)}行')

方法4:列名不一致的文件合并(字段映射)

各分公司的表头叫法不同,合并前先统一列名。

【影刀操作】

  1. 添加【Python】指令
    importpandasaspd# 字段映射表:把各种叫法统一成标准字段名column_mapping={'销售金额':'销售额','销售额(元)':'销售额','sales_amount':'销售额','商品名':'产品名称','产品名':'产品名称','product_name':'产品名称','客户名':'客户名称','买家':'客户名称',}# 必须有的列(合并后验证)required_columns=['销售额','产品名称','客户名称']df=pd.read_excel(r'C:\分公司A\数据.xlsx')# 重命名列df.rename(columns=column_mapping,inplace=True)# 检查必填列是否都有missing_cols=[cforcinrequired_columnsifcnotindf.columns]ifmissing_cols:print(f'警告:缺少必填列:{missing_cols}')print(f'当前列名:{list(df.columns)}')

有什么坑

坑1:表头在第几行不确定

有些文件前几行是说明或空行,真正的表头在第3行。

解决方法:指定header参数:pd.read_excel(file, header=2)从第3行(索引2)开始读。

坑2:合并后总行数对不上

某个文件里有重复数据,合并后总数大于预期。

TEMU店群矩阵自动化运营核价报活动

解决方法:合并后做去重:df.drop_duplicates(subset=['唯一标识列'])

坑3:数字被读成字符串

Excel里的数字格式是文本格式,读进来是字符串"1,234.56",不能直接计算。

解决方法:

df['销售额']=df['销售额'].astype(str).str.replace(',','').str.replace('元','').astype(float)

坑4:文件正在被别人打开

读取共享盘上的文件时,别人正在编辑,读取报错。

解决方法:捕获异常,等10秒重试;或者只读取文件,不写入(不会冲突)。

实战经验

某连锁超市30家门店每天上传销售Excel,总部汇总。做法:用影刀监控文件夹,新文件到达就触发合并流程,每天早上9点前汇总报表自动发到总部群里。

总结

Excel多表合并首选Pandas,核心是处理好三个问题:文件格式不一致(列名映射)、数据质量(去重+去空行)、合并后验证(总行数、关键列非空)。把这三步做扎实,再多的表都能稳定合并。