Uma planilha possui uma matriz 50x36 com valores. A função deve obter valores de determinadas colunas e construir um array se a célula col+1 for maior que 0. A primeira parte do código é chamar a página uma vez, obtendo todos os valores em uma linha, depois com for aninhado e um if, criando a matriz desejada. A segunda parte é fazer exatamente a mesma coisa, mas chamar a página com getValues() várias vezes, o que deveria ser mais lento e não é uma boa prática de acordo com o Google. O primeiro produz um resultado 100 ms mais lento que o segundo. Alguém pode explicar?
function PieseArray() {
let pag = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Configuracion');
//start counting time for the first part
let start1 = new Date
let allTheParts = pag.getRange(11,40,50,36).getValues()
let array2=[]
for (let i=0;i<36;i=i+4){
for (let j=0;j<allTheParts.length;j++){
if(allTheParts[j][i+1]>0){
array2.push([allTheParts[j][i],allTheParts[j][i+1]])
}
}
}
let end1 = new Date
Logger.log(end1-start1)
//start of the second part
let start2 = new Date
let piese = []
for(let k=40;k<=72;k=k+4){
piese = piese.concat(pag.getRange(11,k,50,2).getValues())
}
let array1=[]
for (let i=0;i<piese.length;i++){
if(piese[i][1]!=''){
array1.push(piese[i])
}
}
let end2 = new Date
Logger.log(end2-start2)
return(array1)
}
Registro de execução
1:06:11 PM Notice Execution started
1:06:12 PM Info 107.0 (first part)
1:06:12 PM Info 15.0 (second part)
1:06:12 PM Notice Execution completed
O resultado é o mesmo array, mas o tempo de execução é muito estranho. Eu esperava que a segunda parte do código fosse bem mais lenta.