对于循环超时:JavaScript / Google Apps脚本

时间:2017-12-12 13:52:55

标签: javascript loops for-loop google-apps-script google-sheets

所以我对Google Apps脚本有这个问题。它超时是因为应用服务器请求耗时太长。我只是想知道我的编码是否可以清理一下以便更快地运行,还是有另一种方法可以工作?

以下代码:

for (var y = 1; y < listLast ; y++) {

  var matchor = listSheet.getRange("B" + y).getValue();
  var listEmCo = listSheet.getRange("A" + y).getValue();
  if(matchor == "Match") {
    Logger.log("Do Nothing");
  } else {
  for (var x = 0; x < formLast; x++) {

  if(listEmCo == formData[x]){

    listSheet.getRange("B"+ [y]).setValue("Match");
    break;

  } else {

    listSheet.getRange("B"+ [y]).setValue("No Match");

   }
  }
 }   
}

感谢您的回复:)

1 个答案:

答案 0 :(得分:3)

不要在循环中使用.getValue();。这个操作很重。

请使用range.getValues()然后循环数组以获取值。

计划是:

  1. 获取最初的range
  2. 使用var data = range.getValues();
  3. 获取数据
  4. 使空数组写入新值array = [];
  5. 循环数据并创建新数组,使用适当的值填充[["value1"], ["value2"], ...,]注意。它应该是2D数组。
  6. 循环后定义粘贴新值的范围:rangeTo
  7. 使用rangeTo.setValues(array);粘贴新值。
  8. 查看更多:

    标记#Another-get-data-from-range-question

    查看有关主题的更多问题:

    http://stackoverflow.com/questions/39859421/google-script-internal-error-after-15-seconds

    http://stackoverflow.com/questions/39586911/google-script-exceeded-maximum-execution-time-help-optimize

    http://stackoverflow.com/questions/38618266/google-sheet-script-times-out-need-a-new-way-or-flip-it-upside-down

    http://stackoverflow.com/questions/44021567/google-sheet-script-multiple-getrange-looping

    Code runs too slow