【问题标题】:Script time limit for Google sheet谷歌工作表的脚本时间限制
【发布时间】:2021-03-06 16:50:43
【问题描述】:

我需要更改大量电子表格中存在的特定工作表 (LISTAFINAL) 的相同单元格中的一些公式,这些电子表格位于同一文件夹中。但它在 6 分钟的 Google 脚本时间限制下停止,仅在 9 个电子表格中进行更改,并显示消息:Erro - Exceeded maximum execution time。

  1. 我的目标:

我想知道是否有任何方法可以加快这个过程,或者对更多的电子表格进行更改,或者两者兼而有之。代码如下:

function validacao(){
  var folder = DriveApp.getFolderById("FOLDER ID");
  var x = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  while (x.hasNext()) {
    SpreadsheetApp.open(x.next()).getSheets().forEach(sheet => {
      sheet.getRange('LISTAFINAL!F5:F15').activate();
      sheet.getRange('LISTAFINAL!F5').setValue('=ALUNO1!$F$167');
      sheet.getRange('LISTAFINAL!F6').setValue('=ALUNO2!$F$167');
      sheet.getRange('LISTAFINAL!F7').setValue('=ALUNO3!$F$167');
      sheet.getRange('LISTAFINAL!F8').setValue('=ALUNO4!$F$167');
      sheet.getRange('LISTAFINAL!F9').setValue('=ALUNO5!$F$167');
      sheet.getRange('LISTAFINAL!F10').setValue('=ALUNO6!$F$167');
      sheet.getRange('LISTAFINAL!F11').setValue('=ALUNO7!$F$167');
      sheet.getRange('LISTAFINAL!F12').setValue('=ALUNO8!$F$167');
      sheet.getRange('LISTAFINAL!F13').setValue('=ALUNO9!$F$167');
      sheet.getRange('LISTAFINAL!F14').setValue('=ALUNO10!$F$167');
      sheet.getRange('LISTAFINAL!F15').setValue('=ALUNO11!$F$167');
    });
  }
}

【问题讨论】:

    标签: google-apps-script google-sheets google-drive-api


    【解决方案1】:

    解释:

    • 您遍历每个电子表格文件的所有工作表。您的目标是只获得一张纸并将公式放入特定的单元格中。因此,您可以摆脱forEach 循环。

    • best practice 使用数组而不是迭代地使用多个 google 应用程序脚本函数。

    • 例如,在您的代码中,您使用了 getRange 和 setValue 11 次。如果您将公式值存储在一个数组中,您将能够仅使用一个 getRange 和 setValues 来存储它们。

    解决方案:

    function validacao(){
      const folder = DriveApp.getFolderById("FOLDER ID");
      const x = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
      const formulas = Array(11).fill().map((_, i) => [`=ALUNO${i+1}!$F$167`]);
      while (x.hasNext()) {
          let ss_target = SpreadsheetApp.open(x.next());
          let sh = ss_target.getSheetByName("LISTAFINAL");
          sh.getRange('F5:F15').setValues(formulas);
      }
    }
    

    【讨论】:

    • 我最初的想法是一个数组系统,我尝试了一些解决方案,但我不知道如何为这个脚本编写它。有些公式不起作用,但你又完成了这项工作,而且速度非常快。现在,一个包含 12 个电子表格的文件夹仅在 13 秒内处理完毕。再次非常感谢您。
    猜你喜欢
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多