Вы пытаетесь оптимизировать функцию скрипта PreenchePlanilhaFinal()
.
Время выполнения зависит от многих операторов getValue
;каждый из них (особенно когда повторяется в цикле) может быть довольно дорогостоящим. Решение, где это возможно, состоит в том, чтобы: 1) getValues()
только один раз и 2) сделать это вне цикла.
Следующий скрипт не протестирован, но он демонстрирует базовую методологию.
function PreenchePlanilhaFinal() {
var App = SpreadsheetApp;
App.getActiveSpreadsheet().getSheetByName('MacroHelp').getRange(1,1).activate(); // get MacroHelp A1
var helpMacro = App.getActiveSpreadsheet().getActiveSheet(); //aba que vc está ativo
var lastLine = helpMacro.getLastRow();
// new line to get last column
var lastColumn = helpMacro.getlastColumn();
// new line to declare start line as a variable
var startRow = 214;
// define the range and get values
var helpMacroData = helpMacro.getRange(startRow,1,lastLine-startRow+1,lastColumn).getValues();
// declare aba outside the loop, and define the range and get values
var aba = App.getActiveSpreadsheet().getSheetByName(nomeAba);
var abaLR = aba.getlastRow();
var abaLC = aba.getLastColumn();
var abaData = aba.getRange(1,1,abaLR,abaLC).getValues();
// note i = 0 since the values start on line 214
for (var i = 0; i < lastLine; i++){
if (helpMacroData[i][16] == "") // describe variable as array value
{
var regionCode = helpMacroData[i][4];// describe variable as array value
var nomeAba = ""; //inicializo a variável da região
for (var j = 0; j < lastLine; j++){ // set j to 0 since arrays are zero-based
if (regionCode == helpMacroData[0][19]){// describe variable as array value
nomeAba = helpMacroData[j][20];// describe variable as array value
break;
}
}
var email = helpMacroData[i][0];// describe variable as array value
aba[0][0].activate(); //ativo a aba //// describe variable as array value
for (var k = 0; k < abaLC; k++){ set k to 0 since arrays are zero-based, also make "<" not "<="
if (email == aba[k][7]){ // describe variable as array value
App.getActiveSpreadsheet().getActiveSheet().getRange(k, 31, 1, 11).setValues(helpMacro.getRange(i, 6, 1, 11).getValues());
}
}
helpMacro.getRange(i, 17).activate().setValue("Feito");
}
}
}