如何在Google应用程序脚本中实现批处理以避免执行超时

时间:2019-05-28 08:28:17

标签: google-apps-script batching

我在这里找到了一种减少执行时间的解决方案,但是我无法通过此处讨论的批处理来实现。 [问题]:Google app script timeout ~ 5 minutes?

对不起,我是脚本的新手。下面的脚本遍历所有工作表,并将工作表名称更改为A1中的值。

function onEdit() {
var ss = SpreadsheetApp.getActive();
var allsheets = ss.getSheets();

// Array holding the names of the sheets to exclude from the execution
var exclude =["Sheet1","Sheet2","Sheet3","Article","Frontpage","Logos","Sheet4","Sheet5","Sheet6","Sheet10"];

for(var i=10;i<allsheets.length;i++) {
var sheet = allsheets[i];
var oldName = sheet.getName();
var newName = sheet.getRange(1,1).getValue();
if (newName.toString().length>0 && newName !== oldName) {
sheet.setName(newName);

// Stop iteration execution if the condition is met.
if(exclude.indexOf(sheet.getName())==-1) continue;
}

} // end of loop

} // end of function

如何使用下面的示例作为参考,对上述脚本实施批处理以减少服务调用次数?

for (var i = 1; i <= 100; i++) { SpreadsheetApp.getActiveSheet().deleteRow(i); }

执行以下操作:

SpreadsheetApp.getActiveSheet().deleteRows(i, 100);

1 个答案:

答案 0 :(得分:0)

尝试一下:

function onEdit(e) {
  var sh=e.range.getSheet();
  var name=sh.getName();
  var a1=sh.getRange('A1').getValue();
  if(name!=a1) {
    sh.setName(a1);
  }
} 
  

注意:没有事件对象,您将无法运行此功能。因此,除非提供事件对象,否则无法从脚本编辑器运行它。