如何让Power Query像Excel一样解析EasyPower生成的XML文件?
解决方案:在Power Query中直接解析EasyPower生成的SpreadsheetML格式XML
EasyPower生成的XML属于SpreadsheetML格式(Excel原生支持的XML表格格式),Excel会自动识别该格式的工作簿/工作表结构,但Power Query默认按通用XML节点解析,所以需要自定义M代码来复刻Excel的解析逻辑,无需转存为XLSX。
具体步骤(以你的示例文件为例)
- 在Power Query(Excel或Power BI)中新建空白查询,打开高级编辑器,替换为以下M代码:
let // 加载XML文件(替换为你的文件路径,Power BI中可使用文件数据源) Source = Xml.Tables(File.Contents("你的EasyPower XML文件路径")), // 定位到Workbook节点下的Worksheet集合 Workbook = Source{0}[Worksheet], // 遍历每个工作表,解析数据 ParseWorksheets = Table.TransformColumns(Workbook, { {"Table", (table) => let // 获取所有行 Rows = table{0}[Row], // 解析每行的单元格数据 ParseRows = Table.FromList(Rows, Splitter.SplitByNothing(), null, null, ExtraValues.Error), ExpandCells = Table.ExpandRecordColumn(ParseRows, "Column1", {"Cell"}, {"Cell"}), ParseCells = Table.TransformColumns(ExpandCells, { {"Cell", (cell) => if Value.Is(cell, type list) then // 处理多个单元格的行 Table.FromList(cell, Splitter.SplitByNothing(), null, null, ExtraValues.Error) else // 单个单元格的行 Table.FromRecords({cell}) } }), ExpandCellDetails = Table.ExpandTableColumn(ParseCells, "Cell", {"Data"}, {"Data"}), // 提取单元格值(处理可能的空值) ExtractValues = Table.TransformColumns(ExpandCellDetails, {{"Data", each if _ = null then null else _{0}[#"Text"]}}), // 转置为表格(第一行作为表头) FirstRowAsHeader = Table.PromoteHeaders(Table.Transpose(ExtractValues), [PromoteAllScalars=true]) in FirstRowAsHeader }, // 提取工作表名称(对应ss:Name属性) {"@ss:Name", each _} }), // 整理结果:保留工作表名称和对应的数据表 FinalResult = Table.RenameColumns(ParseWorksheets, {"@ss:Name", "工作表名称", "Table", "数据表"}) in FinalResult
- 调整代码细节:
- 替换
File.Contents中的文件路径为你的XML文件路径;Power BI中可通过"获取数据->文件->XML"加载后,替换Source部分为加载的XML节点 - 如果你的XML中节点前缀(如
ss:)或节点名称不同,需对应修改代码中的节点引用(比如@ss:Name、Worksheet、Table等)
- 替换
代码说明
- 核心逻辑是遍历XML中的
Worksheet节点,提取每个工作表的名称,然后解析内部的Table->Row->Cell结构,将嵌套的单元格数据转换为标准表格 - 处理了单行多单元格、空单元格的情况,自动将第一行设为表头,和Excel打开的效果一致
注意事项
- 如果XML中包含合并单元格、公式或特殊数据类型(如数值、日期),需要额外处理对应节点的属性(比如
ss:Type)来映射正确的数据类型 - 不同版本的EasyPower生成的XML结构可能略有差异,可通过Power Query的"查看源"功能查看XML节点结构,调整代码中的节点路径
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

