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

在Google App Script中内存直接解析XLSX响应为JSON时遇压缩方法不支持错误的解决方法

在Google App Script中内存直接解析XLSX响应为JSON时遇压缩方法不支持错误的解决方法

我来帮你解决这个问题!你遇到的Unsupported ZIP Compression method NaN错误,核心原因是Google Apps Script中Blob.getBytes()返回的是有符号字节数组(元素范围-128到127),而SheetJS(xlsx.js)解析时需要的是无符号字节数组(元素范围0到255),两者的字节值表示不一致,导致XLSX文件的ZIP压缩格式无法被正确识别。

下面是修正后的完整代码,全程在内存中处理,无需保存到Drive:

function parseExcelToJson() {
  try {
    // Step 1: 从URL获取Excel文件
    const response = UrlFetchApp.fetch('https://www.nasdaqtrader.com/Content/ProductsServices/TRADING/TRF-Chicago-Test-Securities.xlsx');
    
    // Step 2: 将响应转为内存Blob对象
    const blob = response.getBlob();
    
    // Step 3: 获取GAS默认的有符号字节数组
    const signedByteArray = blob.getBytes();
    
    // 关键修正:把有符号字节数组转成SheetJS需要的无符号Uint8Array
    const uint8Array = new Uint8Array(signedByteArray.map(byte => byte < 0 ? byte + 256 : byte));
    
    // Step 4: 用SheetJS解析无符号字节数组
    const data = XLSX.read(uint8Array, { type: 'array' });
    
    // Step 5: 定位到第一个工作表
    const sheet = data.Sheets[data.SheetNames[0]];
    
    // Step 6: 将工作表数据转为JSON格式
    const json = XLSX.utils.sheet_to_json(sheet);
    
    // Step 7: 输出并返回结果
    console.log(JSON.stringify(json, null, 2));
    return json;
    
  } catch (e) {
    // 输出更详细的错误信息用于调试
    console.error(`解析出错:${e.message}\n堆栈信息:${e.stack}`);
    return null;
  }
}

核心问题与修正解释

  1. 字节类型不匹配:Google Apps Script的getBytes()返回的字节是带符号的(负数表示大于127的字节值),而SheetJS解析ZIP格式(XLSX本质是ZIP包)时,需要无符号的字节值才能正确识别压缩算法,这就是你遇到Unsupported ZIP Compression method NaN的根本原因。
  2. 日志优化:替换了原生Logger.log为console系列方法,能在脚本编辑器的日志面板看到更清晰的结构化输出。

额外注意事项

  • 请确保SheetJS的xlsx.full.min.js已经正确添加到你的GAS项目:可以通过脚本编辑器的「扩展程序」→「Apps Script 库」添加,或者直接将库的完整代码粘贴到项目的新脚本文件中。
  • 首次测试时,建议先通过console.log查看JSON输出,确认解析后的数据结构符合预期。

备注:内容来源于stack exchange,提问作者Scriphy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:18:10