Google Apps Script如何将非连续单元格值存入数组并解决undefined问题
问题排查与修正方案
- 变量命名冲突
你使用了JavaScript内置构造函数Array作为变量名,会引发上下文冲突,导致取值异常,建议更换为普通自定义变量名(如cellValues)。 - 取值与访问逻辑不匹配
getRange(单个单元格地址).getValue()返回的是单元格的直接值(此处为日期类型),不是二维数组结构。你在循环中使用数组[i][0]的方式尝试访问二维数组第一列的值,对单个值使用下标[0]自然会返回undefined。 - 效率优化建议
逐单元格调用getRange()、getValue()会产生多次IO请求,性能极差,更推荐使用getRangeList()批量处理非连续单元格。
修正代码
方案1:直接修改现有代码
// 修改变量名,修改循环访问逻辑 var cellValues = [ sheet.getRange("AD3").getValue(), sheet.getRange("AG3").getValue(), sheet.getRange("AJ3").getValue(), sheet.getRange("AM3").getValue(), sheet.getRange("AD23").getValue(), sheet.getRange("AG23").getValue(), sheet.getRange("AJ23").getValue(), sheet.getRange("AM23").getValue(), ] // 循环直接访问值即可,不需要加[0] for (var i=0; i < cellValues.length; i++) { if (cellValues[i] != ""){ Logger.log(cellValues[i]) } }
方案2:优化为批量取值(性能更高)
// 先批量定义所有非连续单元格的地址列表 var rangeList = sheet.getRangeList([ "AD3","AG3","AJ3","AM3", "AD23","AG23","AJ23","AM23" ]); // 批量取出所有值 var cellValues = rangeList.getRanges().map(range => range.getValue()); // 循环输出 for (var i=0; i < cellValues.length; i++) { if (cellValues[i] != ""){ Logger.log(cellValues[i]) } }
内容的提问来源于stack exchange,提问作者Brodieman
相关产品推荐
相关产品推荐

