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

Google Apps Script读取Sheet多范围数据调用getRangeList报错如何解决

错误修复说明

核心报错原因

SpreadsheetApp.Sheet.getRangeList()方法要求入参为范围字符串组成的数组,你当前传入了多个独立的字符串参数,不符合方法签名要求。

其他隐藏问题

  • getRange()方法不支持同时传入多个范围,多范围取值必须使用getRangeList()
  • getRangeList().getValues()返回的是每个范围对应值数组组成的嵌套数组,需要先拍平才能正常遍历所有行
  • 循环中使用的obj变量未提前定义,应该分别操作你声明的blend_Obj、mix_Obj对象

修复后完整代码

let sheet = openSheet("Spices list");
// 给getRangeList传入数组格式的范围列表
const spiceBlendRanges = sheet.getRangeList([
  'B67:B83','B85:B86','B88:B114','B116:B134',
  'B136:B147','B149:B154','B156:B223','B225'
]);
// 合并所有范围的取值结果为单一行数组
const data_SpiceBlend = spiceBlendRanges.getRanges().flatMap(range => range.getValues());

// 多范围取值改用getRangeList
const spiceMixRanges = sheet.getRangeList(['B21:B65','B232:B242']);
const data_SpiceMix = spiceMixRanges.getRanges().flatMap(range => range.getValues());

const blend_Obj = {};
const mix_Obj = {};
// 空值判断避免无数据时报错
if (data_SpiceBlend.length === 0 || data_SpiceMix.length === 0) {
  return;
}

let blendSku = data_SpiceBlend[0][0];
let mixSku = data_SpiceMix[0][0];
let blendContent = [];
let mixContent = [];

// 替换未定义的obj为blend_Obj,从第二行开始遍历
for (const row of data_SpiceBlend.slice(1)) {
  blend_Obj[blendSku] = blendContent;
  blendSku = row[0];
  blendContent = []; 
}

// 替换未定义的obj为mix_Obj,从第二行开始遍历
for (const row of data_SpiceMix.slice(1)) {
  mix_Obj[mixSku] = mixContent;
  mixSku = row[0];
  mixContent = [];
}

blend_Obj[blendSku] = blendContent;
mix_Obj[mixSku] = mixContent;
model.blend = blend_Obj;
model.mix = mix_Obj;

内容的提问来源于stack exchange,提问作者Kevin Tran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:15:06