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
相关产品推荐
相关产品推荐

