如何修复:循环将无法完成

时间:2019-06-11 04:31:03

标签: loops google-apps-script google-sheets nested-loops

我正在尝试在col中搜索一组单词,并在行末添加yes或no。该脚本会针对前几个条目运行,但会停顿一半。

我正在使用textFinder进行搜索并提取结果行,以便可以编辑是和否。

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [];
  menuEntries.push({ name: "test", functionName: "test" });
  ss.addMenu("Commands", menuEntries);
}

function test() {
  var backupCol = 2
  var dataStartRow = 1
  var row;
  var searchString;
  var textfinder;
  var searchResults;
  var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("input");
  var dataLastRow = dataSheet.getLastRow();
  dataSheet.getRange(dataStartRow, backupCol, dataLastRow).setValue("NO");
  for (var i = 0; i < yesArr.length; i++) {
    searchString = yesArr[i];
    textfinder = dataSheet.createTextFinder(searchString);
    searchResults = textfinder.findAll(); 
    for (var i = 0; i < searchResults.length; i++) {
      row = searchResults[i].getRow();
      dataSheet.getRange(row, backupCol).setValue("YES");
    }
  }
}

我希望所有包含yesArr值的条目的输出在该行的col B中都具有yes。但实际输出只能持续到一半

1 个答案:

答案 0 :(得分:0)

您的问题出在嵌套的for-loops内。

在两个循环中将i用作索引会对编译器造成问题。

将第二个for-loops索引更改为x将解决此问题。

 for (var i = 0; i < yesArr.length; i++) {
    searchString = yesArr[i];
    textfinder = dataSheet.createTextFinder(searchString);
    searchResults = textfinder.findAll(); 
    for (var x = 0; x < searchResults.length; x++) {
      row = searchResults[x].getRow();
      dataSheet.getRange(row, backupCol).setValue("YES");
    }
  }