如何在Google表格中增强自动隐藏脚本,以便它不会超时

时间:2015-05-08 13:08:09

标签: google-apps-script google-sheets

我有一个脚本,我在多个Spreadsheets上运行...它会自动隐藏包含特定值的行。目前这个脚本设置为每天凌晨3点左右运行,以确保在处理过程中没有人处于活动状态。问题是我现在遇到的是这些表格太大而无法使用我当前的脚本,它逐行运行。脚本超时但未完成。我猜它仍在所有已隐藏的行上运行脚本。

这是我当前的脚本,非常基本:

function autoHide() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("SHIPPING");

      //get data from column 
  var data = sheet.getRange('AD:AD').getValues();

      //iterate over all rows
  for(var i=0; i< data.length; i++){
      //compare first character, if greater than 0, then hide row
    if(data[i][0] > 0){
      sheet.hideRows(i+1);

    }
  }
}

我一直在寻找更好的选择,并且发现人们在谈论使用数组过滤器或批量运行的地方,只是不同的东西似乎不足以让我翻译成我正在处理的东西。我知道逐行运行并不是最好的方法,尤其是超过1000行且不断增长。

对于最佳情况,我希望有一个非常有效的脚本,它使用我当前脚本所做的处理的一小部分。否则,如果只有一种方法可以在可见的行上运行脚本,那就差不多了。最糟糕的情况是,如果有一种方法可以告诉它在它给出超时错误时从中断的地方继续...通过放置某种类型的标签或某些东西来知道从哪里开始备份。

我认为不需要链接工作表,我只需要能够在名为“SHIPPING”的工作表中隐藏AD列中数字大于0的任何行。

1 个答案:

答案 0 :(得分:0)

虽然您可以加快脚本本身的速度(例如通过批量连续需要隐藏的行),但也会超时。 相反,您的脚本应该在脚本属性中记住它处理的最后一行,如果脚本超时,它将继续从该行开始。
您还需要更改触发时间。让它每10分钟运行一次,但只在1)过去的凌晨3点和b)处理的最后一行还不是最后一行(完成后重置为零)时才开始处理。
这应该处理巨大的床单就好了。到凌晨5点它将从凌晨3点起运行12次,因此它应该能够处理12次以上的行 注意我选择10分钟触发器,以便先前的触发器(可以运行6分钟)不会与下一个触发器重叠 确保在工作表和脚本文件属性中设置时区,以便在检查过去的凌晨3点时是否使用时区。