“超过了Google Apps脚本的最大执行时间”停止了我的脚本

时间:2020-03-25 13:30:58

标签: google-apps-script google-sheets

我正在使用Google表格处理一个项目,并且需要使用Google Apps脚本创建一个脚本。

我需要重写工作表中包含特定数字的每一行。 我现在有以下代码:

function AddDuplicate() {
  var app = SpreadsheetApp;
  var ActiveSheet = app.getActiveSpreadsheet().getActiveSheet();
  //var data = sheet.getDataRange().getRow();

  var Zdroj = app.getActiveSpreadsheet().getSheetByName("ZDROJ");
  var Vysledek = app.getActiveSpreadsheet().getSheetByName("VYSLEDKY");
  var PocetRadkuVysledku = 1;
  for(var i= AktualniPoziceY ;i<500;i++)
  {
    var pocet = Zdroj.getRange(i,7).getValue();
   for(var y = 1; y<pocet+1;y++)
     {
     for(var o = AktualniPoziceX ; o < 10; o++)
       {
         var Pom = Zdroj.getRange(i,o).getValue();
         Vysledek.getRange(PocetRadkuVysledku, o).setValue(Pom);
        }
        PocetRadkuVysledku++;
     }
   }
}

它可以工作,但是我唯一遇到的问题是“超出了Google Apps脚本的最大执行时间”错误,这将在某些时候停止我的脚本。有人可以帮忙,如何克服这个问题?

1 个答案:

答案 0 :(得分:0)

您超出最大执行时间的原因是您的代码运行缓慢,请参见Apps Script Best Practices

如何将其应用于您的案例:

使用数组并在完成迭代后仅进行一次调用,而不是在嵌套的for循环的每次迭代中检索范围和设置值(由于多次调用SpreadsheetApp服务,效率低下)。

使用getValues()setValues()代替getValue()setValue()

示例(您需要根据自己的需要调整range维度,重要的是目标范围的行和列数与原始范围相同)

function AddDuplicate() {
  var app = SpreadsheetApp;
  var ss = app.getActive();
  var Zdroj = ss.getSheetByName("ZDROJ");
  var Vysledek = ss.getSheetByName("VYSLEDKY");
  var pocetArray = Zdroj.getRange(1,7, 500, 1).getValues();   
  Vysledek.getRange(1, AktualniPoziceX, pocet, 500, 1).setValues(pocetArray);
 }