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

如何在Power Query中合并列数与列布局不同的Excel工作表

方案可行性及优化实现

你的方案完全可行,不过更推荐用列名映射+标准化结构的方式替代手动移列,这样能适配自动导出文件可能出现的列顺序变动,流程稳定性更强。以下是具体实现步骤和代码:

核心思路

  1. 识别每个工作簿对应的表类型(BillTo/ShipTo)
  2. 对BillTo表:添加空的SHIPTO_CUST列,保留原有结构
  3. 对ShipTo表:
    • 将BILLTO_CUST重命名为CUSTOMER_NUMBER(与BillTo的对应字段匹配)
    • 仅保留BillTo表包含的列名,缺失的列自动补空
  4. 合并两个标准化后的表,统一使用BillTo的表头结构

完整Power Query代码

let
    // 源文件夹路径
    Source = Folder.Files("C:\Users\ME\OneDrive\Contact Template\Current Contacts"),
    // 加载每个工作簿的工作表数据并标准化结构
    #"Added Custom" = Table.AddColumn(Source, "Standardized Data", each 
        let
            // 加载工作簿并取第一个工作表数据
            Workbook = Excel.Workbook(File.Contents([Folder Path] & [Name]), null, true),
            SheetData = Table.First(Workbook[Data]),
            // 识别表类型(按文件名判断,可根据实际调整)
            TableType = if Text.Contains([Name], "BillTo") then "BillTo" else "ShipTo",
            // 标准化BillTo:添加空的SHIPTO_CUST列
            ProcessBillTo = if TableType = "BillTo" then
                Table.AddColumn(SheetData, "SHIPTO_CUST", each null)
            else
                // 标准化ShipTo:重命名字段+对齐BillTo列结构
                let
                    RenameKeyColumn = Table.RenameColumns(SheetData,{{"BILLTO_CUST", "CUSTOMER_NUMBER"}}),
                    // 替换为实际BillTo的所有列名
                    TargetColumns = {"CUSTOMER_NUMBER", "CONTACT_NAME", "PHONE", "EMAIL", "SHIPTO_CUST", "ADDRESS"},
                    // 保留目标列,缺失列自动补空
                    AlignColumns = Table.SelectColumns(RenameKeyColumn, TargetColumns, MissingField.UseNull)
                in
                    AlignColumns
        in
            ProcessBillTo),
    // 展开标准化后的数据表
    #"Expanded Standardized Data" = Table.ExpandTableColumn(#"Added Custom", "Standardized Data", 
        List.Distinct(List.Combine(Table.Column(#"Added Custom", "Standardized Data")))),
    // 提升第一行为表头(统一使用BillTo的表头结构)
    #"Promoted Headers" = Table.PromoteHeaders(#"Expanded Standardized Data", [PromoteAllScalars=true]),
    // 移除无关系统列
    #"Removed Unnecessary Columns" = Table.RemoveColumns(#"Promoted Headers", 
        {"Extension", "Date accessed", "Date modified", "Date created", "Attributes"})
in
    #"Removed Unnecessary Columns"

关键说明

  • 需将代码中的TargetColumns替换为实际BillTo表的完整列名列表,确保结构完全匹配
  • 表类型识别逻辑可根据实际调整(比如改用工作表名判断:TableType = if Table.First(Workbook[Name]) = "BillTo" then "BillTo" else "ShipTo")
  • 该流程全程自动化,无需手动编辑导出文件,可重复运行适配新生成的文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:35:47