使用 forEach() 函数的说明

问题描述 投票:0回答:2

注意:这样做的目的只是尝试了解 forEach 函数的工作原理,以便我可以尝试将其应用到其他地方。

我正在尝试学习如何在应用程序脚本上使用 forEach 函数,但当我尝试使用它时它不起作用。 我想循环遍历 A 列的前 15 个单元格并将背景设置为红色。

我尝试过这个,但是当我运行它时,它显示“单元格超出范围”

 function onOpen() {
 
  var range = SpreadsheetApp.getActive().getRange("A1:A15");
  var values = range.getValues();
  values.forEach(function(row) {
    range.getCell(row,1).setBackground('red');
   
 });
 }
for-loop google-apps-script google-sheets
2个回答
1
投票

首先,对于您手头的问题,根本不需要

forEach
。谷歌会为你做到这一点。您可以在范围内使用
setBackground()
来设置所有单元格的背景。

你的程序就这么简单:

function onOpen() {
  const range = SpreadsheetApp.getActive().getRange("A1:A15");
  range.setBackground("red");
}

请注意:保持变量不可变和本地变量是一个很好的做法(请参阅范围),因此您应该使用

const
而不是
var

对于

forEach()
,您必须记住,范围或范围的值是二维的,因此如果您想迭代所有单元格,则需要两个
forEach()
循环。

这里有一个关于如何做到这一点的示例:

function onOpen() {
  const range = SpreadsheetApp.getActive().getRange("A1:A15");
  const values = range.getValues();
  values.forEach((row, rowIndex) => 
    row.forEach((cell, columnIndex ) => Logger.log(`Content of cell ${rowIndex}/${columnIndex} is '${cell}'`)));
}

重要提示:即使您的范围只有一列,

getRange()
函数仍然会返回一个二维数组!


0
投票

修改要点:

  • forEach回调函数的参数分别是element、index、array。在您的脚本中,元素(单元格值)用作行号。我认为这就是您当前问题的原因。

  • 如果要用索引作为行号,则需要加1。因为行号的起始位置是1,请注意这一点。

当这些点反映在你的脚本中时,就会变成如下所示。

修改后的脚本:

来自:

  values.forEach(function(row) {
    range.getCell(row,1).setBackground('red');
   
 });

致:

values.forEach(function (element,row) {
  range.getCell(row + 1, 1).setBackground('red');
});

注:

  • 如果您想设置单元格“A1:A15”的背景颜色,我认为以下脚本可能有用。但是,从你的问题来看,我认为你这个问题的目标可能是了解

    forEach
    。所以,我提出了上述修改。

      SpreadsheetApp.getActive().getRange("A1:A15").setBackground('red');
    

参考:

© www.soinside.com 2019 - 2024. All rights reserved.