求助:Google Apps Script中forEach()函数使用报错‘单元格超出范围’
解决Google Apps Script中forEach遍历单元格报错的问题
问题原因
你写的代码里,values = range.getValues()返回的是二维数组(每个元素是一行的数值数组),values.forEach(function(row) {...})中的row是单元格的具体数值(比如A1单元格的内容),不是行号。用这个数值去调用range.getCell(row,1),自然会因为数值不是合法行号导致「单元格超出范围」错误。
修正后的代码
要遍历行并设置背景,需要利用forEach的第二个参数(索引,从0开始),行号为索引+1:
function onOpen() { var range = SpreadsheetApp.getActive().getRange("A1:A15"); var values = range.getValues(); values.forEach(function(row, index) { // index从0开始,对应行号是index+1 range.getCell(index + 1, 1).setBackground('red'); }); }
或者更直接的方式,直接遍历range的单元格对象(无需先获取values):
function onOpen() { var range = SpreadsheetApp.getActive().getRange("A1:A15"); // 获取当前区域所有单元格对象的数组 var cells = range.getCells(); cells.forEach(function(cell) { cell.setBackground('red'); }); }
补充说明
如果只是给整个区域设置背景,其实不需要forEach,直接用range.setBackground('red')更高效,但既然是学习forEach的用法,上面的两种写法都能帮你理解如何正确遍历元素。
内容的提问来源于stack exchange,提问作者JRod
相关产品推荐
相关产品推荐

