首页 > 解决方案 > 平均每次执行 9 秒的脚本,每次执行交付 145 秒

问题描述

我今天早些时候在 GAS 中创建这个脚本时,测试平均每次执行需要 9 秒:

function ProjetoNovasLigas() {
  var ss = SpreadsheetApp.getActive();
  ss.getRange('Página1!I2:N').copyTo(ss.getRange('Página1!P2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  ss.getRange('Página1!Z2:Z').copyTo(ss.getRange('Página1!S2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  ss.getRange('Página1!Y2:Y').copyTo(ss.getRange('Página1!U2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  ss.getRange('Página1!A2').setFormula('=TEXT(NOW(),"yyyy/mm/dd hh:mm")');
  ss.getRange('Página1!A2').copyTo(ss.getRange('Página1!A2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
}

通过script.google.com自动触发使其每 10 分钟运行一次,完全运行需要 145 秒:

在此处输入图像描述

脚本中是否有任何错误导致它发生?我需要帮助,我会把电子表格留在这里,以防有人想看看可能发生的事情:

https://docs.google.com/spreadsheets/d/15T4UPVtEHv43DLomKcTmdaPuGWMsBUoO7bLvlOhab4k/edit?usp=sharing

标签: google-apps-scriptgoogle-sheetstriggers

解决方案


setValues()您可以通过使用和数组操作对操作进行批处理来加快执行速度。

示例脚本:

function archivr() {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getSheetByName('Página1');
  var lr = sh.getLastRow();
  var values = sh.getRange('I2:Z' + lr).getValues();
  values.forEach(function(row){
    row.push("", row[16]); //[16] = Col Y; Move Col Y to the right of Col Z
    row.splice(6, 11);//Remove Col N to Col Y
  });
  sh.getRange(2,12, values.length, values[0].length).setValues(values); //set modified values to Col P
  sh.getRange('A2').setValue(new Date());
}

参考:


推荐阅读