Google Sheets Script遍历B36:B38非空单元格传值调用函数问题
问题修复说明
现有代码错误点
getValues()方法返回的是二维数组,格式为[行索引][列索引],你选取的B36:B38是单列3行区域,每个单元格的值需要通过searchRange[i][0]获取,原代码直接写searchRange[0]永远只会读取第一行的数组对象,无法获取对应行的单元格值。- 判断条件逻辑错误:你已经通过
getValues()拿到了所有单元格的值存到了searchRange变量里,该变量不存在values属性,searchRange.values永远为undefined,判断永远不生效;同时空单元格返回的是空字符串而非null,判断非空需要覆盖空字符串场景。 - 循环内没有使用遍历索引i获取当前行的内容,所有循环迭代都只会处理第一行的值,无法实现遍历效果;同时循环变量i未声明作用域,会默认成为全局变量,可能引发其他冲突。
修正后代码
var spreadsheet = SpreadsheetApp.getActive(); var searchRange = spreadsheet.getSheetByName('Sheet1').getRange('B36:B38').getValues(); for (var i = 0; i < searchRange.length; i++) { var currentCellValue = searchRange[i][0]; // 同时排除null和空字符串两种空值情况 if (currentCellValue !== null && currentCellValue !== '') { var variableToPassOn = "testing " + currentCellValue; runFunction(variableToPassOn); } }
逻辑说明
修正后的代码会按从上到下的顺序遍历B36:B38区域的单元格,遇到非空单元格就将值封装后传入runFunction执行,Google Apps Script为单线程执行,会等上一次runFunction执行完成后才会进入下一轮循环判断,完全符合你要求的依次执行的逻辑。
内容的提问来源于stack exchange,提问作者Majora
相关产品推荐
相关产品推荐

