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

如何让Power Query像Excel一样解析EasyPower生成的XML文件?

解决方案:在Power Query中直接解析EasyPower生成的SpreadsheetML格式XML

EasyPower生成的XML属于SpreadsheetML格式(Excel原生支持的XML表格格式),Excel会自动识别该格式的工作簿/工作表结构,但Power Query默认按通用XML节点解析,所以需要自定义M代码来复刻Excel的解析逻辑,无需转存为XLSX。

具体步骤(以你的示例文件为例)

  1. 在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
  1. 调整代码细节:
    • 替换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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:55:21