首页 > 解决方案 > 无法在谷歌脚本中运行 for 循环

问题描述

我正在尝试运行 for 循环但没有成功。我想要做的是,我在整个列中有一个 1 的工作表,我需要找到出现 1 的第一行,然后从中删除 25 个单元格。

 var values = sheet.getRange(2, 3, sheet.getLastRow(),sheet.getLastColumn()).getValues();
        for(var i = 0;i<values.length; i++){    
    if(values[i][0] == 1 ){
  Logger.log(i);
  break;
}  }
  for(var j = i;j<i+24; j++){
    sheet.getRange(j,3).setValue("");}

但是,什么也没有发生。我不知道我哪里错了。

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


解释:

您的目标是找到列中的第一个元素,1然后清除25同一列中的单元格内容。

你不需要一个for循环来实现你的目标。您可以使用findIndex

  • 由于您只对一列感兴趣,因此只获取该列并将其用作一维数组;flat将二维数组转换为一维数组:

    sh.getRange(start_row,3,sh.getLastRow()).getValues().flat();

  • 然后使用findIndex查找1此数组中的第一个:

    const index=values.findIndex(v=>v==1) + start_row;

    并添加2( start_row),因为您从第二行开始数。

  • 最后,您不需要for循环来清除单元格的内容。您可以选择所需的范围并使用clearContent一次性清除内容:

    sh.getRange(index,3,25).clearContent();

解决方案:

function myFunction() {
 const ss = SpreadsheetApp.getActive();
 const sh = ss.getSheetByName('Sheet1'); // use the name of your sheet here
 const start_row = 2;
 const values = sh.getRange(start_row,3,sh.getLastRow()).getValues().flat();
 const index=values.findIndex(v=>v==1) + start_row;
 sh.getRange(index,3,25).clearContent();
}

如果这对您很重要,请在 3 行代码中使用相同的解决方案:

function myFunction() {
 const sh = SpreadsheetApp.getActive().getSheetByName('Sheet1'); // use the name of your sheet here
 const index = sh.getRange(2,3,sh.getLastRow()).getValues().flat().findIndex(v=>v==1) + 2;
 sh.getRange(index,3,25).clearContent();
}

推荐阅读