Estou tentando atualizar o valor de uma célula com base no valor de duas outras células em um loop For no Google Apps Script. Aqui está o que consegui até agora:
function myFunction() {
var s = SpreadsheetApp.getActive().getSheetByName("Salary Tracker");
var rank = s.getRange("F2:F").getValues();
var service_length = s.getRange("G2:F").getValues();
var data_len = rank.length;
for(var i=0; i<data_len; i++) {
if(rank[i][0] == "O-4" && service_length[i][0] == 24) {
s.getRange(i+2,12).activate();
s.getCurrentCell().setFormula('=MULTIPLY(9689.10*12');
} else {
}
}
}
Aqui está o link para um exemplo dos dados com os quais estou trabalhando: Exemplo de planilha do Google
Quero que o salário seja calculado na coluna M. No entanto, quando executo a função, nada acontece.
Essa é uma sintaxe inválida, porque a
multiply()
função espera dois argumentos. Você pode consertar assim:...ou, mais simplesmente:
...ou, já que este é um valor codificado, assim:
Há um problema com
.getRange('G2:F)
também. Isso obterá colunasF
eG
, e como você está olhando apenas para a primeira coluna, oif()
sempre obteráfalse
e não fará nada. Você deve usar.getRange('G2:G)
.A função é bem ineficiente, porque chama quatro métodos de API por linha. Você pode querer usar
Range.setValues()
em vez disso, ou jogar o script fora e usar esta fórmula de array diretamente na célulaM1
:Esta fórmula de matriz preencherá toda a coluna de uma só vez, então você deve limpar a coluna
M1:M
antes de adicionar a fórmula para abrir espaço para os resultados.Para completar, aqui está o código citado na pergunta reescrito no Apps Script V8 moderno:
A fórmula de matriz oferecerá o melhor desempenho, mas a versão moderna do Apps Script também será executada ordens de magnitude mais rápido que o código original.