将PHP解码解压二进制文件逻辑迁移至Power Query遇GZip错误求助
解决Power Query中Base64解码+GZip解压报错的方案
正确的M代码步骤
假设从MySQL导入的表名为MySQL_Data,存储Base64编码字符串的字段为EncodedData:
- 添加自定义列完成Base64解码:
= Table.AddColumn(MySQL_Data, "DecodedBinary", each Binary.FromText([EncodedData], BinaryEncoding.Base64))
- 添加自定义列完成GZip解压:
= Table.AddColumn(PreviousStepName, "UncompressedXLSX", each Binary.Decompress([DecodedBinary], Compression.GZip))
- 加载解压后的Excel文件内容:
= Table.AddColumn(PreviousStepName, "XLSXContent", each Excel.Workbook([UncompressedXLSX]))
关键排查点
- 验证GZip幻数:对解码后的二进制取前2个字节,检查是否为
0x1F8B(GZip标准起始标识)。用以下代码查看:
= Table.AddColumn(DecodedStep, "GZipHeader", each Binary.ToList(Binary.Range([DecodedBinary], 0, 2)))
如果结果不是[31, 139],说明Base64解码环节出错——要么原始字段不是Base64字符串,要么编码格式不匹配。
- 核对处理顺序:确认PHP脚本的逻辑是
GZip压缩 → Base64编码,Power Query必须严格按Base64解码 → GZip解压的反向顺序操作,顺序颠倒会直接触发幻数错误。 - 检查MySQL字段类型:如果MySQL中存储的是原生二进制字节流(而非Base64字符串),直接跳过Base64解码步骤,对原始二进制字段执行
Binary.Decompress即可。
内容的提问来源于stack exchange,提问作者FR_123456
相关产品推荐
相关产品推荐

