You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于模板Excel实现多非标准化Excel的Python自动化合并方案咨询

思路可行性与实现方案

你的这个表头映射模板思路完全可行,而且完美适配当前表头未标准化、还需3-4个月才能稳定的场景——把表头匹配逻辑从代码里剥离到外部模板后,后续只需要维护template.xlsx,不用频繁修改Python脚本,能大幅减少重复劳动。

一、template.xlsx的结构设计

建议模板用单个Sheet存储映射关系,列定义如下:

Company NameSource HeaderStandard Header
TataReg numberCar_Reg_No#
TataChasisCar_ChasisNo#
BMWCar_Reg#Car_Reg_No#
BMWCar_Engine NumberCar_Engine No#
  • Company Name:必须和Excel文件名(比如Tata.xlsx)完全对应,确保脚本能精准匹配
  • Source Header:对应各公司Excel里的原始表头内容
  • Standard Header:统一的目标表头(即最终Master Dataframe的列名)

二、Python实现步骤与代码示例

用pandas就能轻松实现,核心逻辑是:读取映射模板→按公司生成表头映射字典→遍历Excel文件→匹配映射并转换列→合并成总表。

1. 依赖安装

如果还没装依赖,先执行:

pip install pandas openpyxl

(openpyxl用于读写xlsx格式文件)

2. 完整代码

import pandas as pd
import glob

# ----------------------
# 1. 读取表头映射模板
# ----------------------
template_df = pd.read_excel("template.xlsx", engine="openpyxl")
# 按公司分组,生成{公司名: {源表头: 标准表头}}的字典
header_mappings = {}
for company, group in template_df.groupby("Company Name"):
    header_mappings[company] = dict(zip(group["Source Header"], group["Standard Header"]))

# ----------------------
# 2. 遍历并处理所有Excel文件
# ----------------------
master_df = pd.DataFrame()
# 假设所有待合并的Excel都放在"excel_files"文件夹下,可根据实际路径修改
excel_file_paths = glob.glob("excel_files/*.xlsx")

for file_path in excel_file_paths:
    # 从文件名提取公司名(比如从"excel_files/Tata.xlsx"中拿到"Tata")
    file_name = file_path.split("/")[-1]
    company_name = file_name.replace(".xlsx", "")
    
    # 跳过无映射的公司文件
    if company_name not in header_mappings:
        print(f"⚠️ 未找到{company_name}的表头映射,跳过该文件")
        continue
    
    # 获取当前公司的表头映射规则
    current_mapping = header_mappings[company_name]
    
    try:
        # 只读取映射中存在的源表头,减少内存占用
        df = pd.read_excel(file_path, usecols=current_mapping.keys(), engine="openpyxl")
        # 重命名列为标准表头
        df.rename(columns=current_mapping, inplace=True)
        # 添加Company标识列
        df["Company"] = company_name
        # 合并到总表
        master_df = pd.concat([master_df, df], ignore_index=True)
        print(f"✅ 成功处理{file_name}")
    except Exception as e:
        print(f"❌ 处理{file_name}失败:{str(e)}")

# ----------------------
# 3. 导出最终的Master Dataframe
# ----------------------
master_df.to_excel("Master_Dataframe.xlsx", index=False, engine="openpyxl")
print("📝 已生成Master Dataframe文件")

三、优化建议

  • 必填列校验:可以在模板里加一列Is Required,脚本里检查每个公司的必填列是否存在,避免漏核心数据
  • 空值处理:在合并前统一处理空值,比如用df.fillna("")或按业务规则填充默认值
  • 批量更新模板:如果有多个公司表头变动,直接在Excel里批量编辑映射,比改代码高效得多
  • 日志记录:把处理日志写到文件里,方便后续排查异常问题

内容的提问来源于stack exchange,提问作者pythonThor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:30:54