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
相关产品推荐
相关产品推荐

