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

Power Query缺失数据列报错问题排查求助

问题根源分析
  • 硬编码动态日期列名:代码里展开GetWorkbookData.Data时,硬编码了当天的日期列4/19/2023,次日新文件的日期列名变更后,这一步直接失效,导致后续步骤找不到对应列触发报错。
  • 表头识别逻辑错误:原始文件顶部存在日期行,直接使用PromoteHeaders会把非表头行内容混入列名,尤其是带斜杠的单元格被识别为列名后,Power Query对特殊字符的处理容易引发匹配失败。
  • 列名依赖不稳定:重建步骤时基于当日文件的列结构,次日文件结构(日期列名)变化后,旧步骤无法适配,导致刷新报错。
解决方案

修改Power Query代码,实现动态列识别、跳过无效顶部行、稳定处理带斜杠的列名:

let
    Source = Folder.Files("J:\PUBLIC\"),
    #\"Filtered Rows" = Table.SelectRows(Source, each ([Extension] = ".xls" or [Extension] = ".xlsx")),
    #\"Filtered Rows1" = Table.SelectRows(#\"Filtered Rows", each Date.IsInCurrentDay([Date created])),
    #\"Filtered Rows2" = Table.SelectRows(#\"Filtered Rows1", each not Text.Contains([Name], "#")),
    #\"Added Custom" = Table.AddColumn(#\"Filtered Rows2", "GetWorkbookData", each 
        let
            // 读取工作簿,不自动检测表头
            WB = Excel.Workbook([Content], false),
            // 筛选Summary工作表
            SummarySheet = Table.SelectRows(WB, each [Name] = "Summary")[Data]{0},
            // 找到真正的表头行:定位包含"SAMPLE TYPE"的行(固定表头标识)
            HeaderRowIndex = Table.PositionOf(SummarySheet, "SAMPLE TYPE", Occurrence.First, (x,y) => Text.Contains(Text.From(x), y)) + 1,
            // 跳过顶部无效行(包括日期行)
            CleanedTable = Table.Skip(SummarySheet, HeaderRowIndex),
            // 提升表头
            PromotedHeaders = Table.PromoteHeaders(CleanedTable, [PromoteAllScalars=true]),
            // 替换列名中的斜杠,避免后续匹配问题
            CleanedColumnNames = Table.RenameColumns(PromotedHeaders, List.Transform(Table.ColumnNames(PromotedHeaders), each {_, Text.Replace(_, "/", " ")}))
        in CleanedColumnNames),
    #\"Removed Other Columns" = Table.SelectColumns(#\"Added Custom",{"GetWorkbookData"}),
    #\"Expanded GetWorkbookData" = Table.ExpandTableColumn(#\"Removed Other Columns", "GetWorkbookData", Table.ColumnNames(#\"Added Custom"[GetWorkbookData]{0})),
    #\"Changed Type" = Table.TransformColumnTypes(#\"Expanded GetWorkbookData",{{"Summary", type text}, {"SAMPLE TYPE", type text}, {"SOFTLINES", type number}, {"TOYS JUVENILE PROD", type number}, {"ELECTRICAL", type number}, {"HARDLINES", type number}, {"HBHF", type number}}),
    #\"Unpivoted Only Selected Columns" = Table.Unpivot(#\"Changed Type", {"SOFTLINES", "TOYS JUVENILE PROD", "ELECTRICAL", "HARDLINES", "HBHF"}, "Attribute", "Value")
in
    #\"Unpivoted Only Selected Columns"
关键修改点说明
  • 动态读取工作表结构:在GetWorkbookData自定义列中直接处理每个工作簿的Summary表,不再依赖外部硬编码的展开列名,适配每日变化的日期列。
  • 精准定位表头行:通过固定标识(如"SAMPLE TYPE")确定表头位置,跳过顶部日期行,确保PromoteHeaders只作用于真正的表头。
  • 提前清理列名特殊字符:提升表头后立即替换列名中的斜杠,避免后续步骤因特殊字符导致列名匹配失败。
  • 动态展开列:使用Table.ColumnNames动态获取列名进行展开,无需硬编码,适配每日文件的结构变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:24:55