Как реализовать пакетную обработку в приложении-скрипте Google, чтобы избежать тайм-аутов выполнения - PullRequest
0 голосов
/ 28 мая 2019

Я нашел решение о том, как сократить время выполнения здесь, но я не могу реализовать его с помощью пакетной обработки, как обсуждалось здесь.[вопрос]: Тайм-аут скрипта приложения Google ~ 5 минут?

Извините, я совершенно новичок в скриптах.Сценарий ниже перебирает все листы и меняет имя листа на значение в 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 голосов
/ 28 мая 2019

Попробуйте это:

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

Примечание: вы не можете запустить эту функцию без объекта события. Поэтому вы не можете запустить его из редактора сценариев, если не предоставите объект события.

...