Google sheet 的脚本时间限制

Script time limit for Google sheet

我需要在特定 sheet (LISTAFINAL) 的相同单元格中更改一些公式,这些单元格存在于大量传播 sheet 中,这些传播位于同一文件夹中。但它在 Google 6 分钟的脚本时间限制处停止,仅在 9 个传播sheet 秒内进行更改,并出现消息:Erro - Exceeded maximum execution time.

  1. 我的目标:

我想知道是否有任何方法或加快此过程或更改更多的点差sheets 或两者兼而有之。这是代码:

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!$F7');
      sheet.getRange('LISTAFINAL!F6').setValue('=ALUNO2!$F7');
      sheet.getRange('LISTAFINAL!F7').setValue('=ALUNO3!$F7');
      sheet.getRange('LISTAFINAL!F8').setValue('=ALUNO4!$F7');
      sheet.getRange('LISTAFINAL!F9').setValue('=ALUNO5!$F7');
      sheet.getRange('LISTAFINAL!F10').setValue('=ALUNO6!$F7');
      sheet.getRange('LISTAFINAL!F11').setValue('=ALUNO7!$F7');
      sheet.getRange('LISTAFINAL!F12').setValue('=ALUNO8!$F7');
      sheet.getRange('LISTAFINAL!F13').setValue('=ALUNO9!$F7');
      sheet.getRange('LISTAFINAL!F14').setValue('=ALUNO10!$F7');
      sheet.getRange('LISTAFINAL!F15').setValue('=ALUNO11!$F7');
    });
  }
}

解释:

  • 你为每个 spreadsheet 文件遍历所有 sheets。您的目标是只得到一个 sheet 并将公式放在特定的单元格中。因此,您可以摆脱 forEach 循环。

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

  • 例如,在您的代码中,您使用了 getRangesetValue 11 次。如果将公式值存储在数组中,您将能够仅使用单个 getRangesetValues.

    来存储它们

解决方案:

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}!$F7`]);
  while (x.hasNext()) {
      let ss_target = SpreadsheetApp.open(x.next());
      let sh = ss_target.getSheetByName("LISTAFINAL");
      sh.getRange('F5:F15').setValues(formulas);
  }
}