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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:36:06