SetValues é mais lento do que setValue?
Eu tenho um Google Doc com script do Google Apps Script em execução e com o qual várias pessoas contribuem. Existe um onEditgatilho que é disparado quando as pessoas editam a planilha. Pelo que entendi, se uma pessoa editar a planilha, isso acionará minha onEditfunção de gatilho.
Se uma segunda pessoa editar a planilha antes de o primeiro onEditprocessamento terminar, ela interrompe a primeira instância e a segunda onEditcomeça sem terminar a primeira.
Para evitar isso, estou tentando tornar meu código o mais eficiente possível com a teoria de que, se o onEditprocesso demorar menos, é menos provável que se sobreponha. Para conseguir isso, tentei minimizar minhas leituras / gravações. Usando uma série de instruções de logger, rastreei linhas de código que consomem muito tempo. Percebi que uma das minhas setValues()linhas leva quase 6 segundos para ser executada. É uma grande matriz sendo postada de volta na planilha depois que eu faço ajustes nela.
Minhas perguntas:
- Uma
setValues()chamada demora mais do que umsetValue()? - Uma
setValues()chamada de um array pequeno leva menos tempo do que uma chamada de um arraysetValues()grande?
Eu sei que um setValues()será muito mais rápido do que 1000 setValue()comandos.
Eu tinha presumido que uma gravação na folha deveria levar a mesma quantidade de tempo, independentemente do tamanho. Existe alguma maneira de minimizar esse tempo?
Respostas
Q1: A
setValues()demora mais do que asetValue()?
A1: Não é. Sobre isso, você pode ver no seguinte resultado experimental.
P2: Uma
setValues()chamada de um array pequeno leva menos tempo do que uma chamada de um arraysetValues()grande?
A2: Sim. Sobre isso, você pode ver no seguinte resultado experimental.
P3: Presumi que uma gravação na planilha deveria levar aproximadamente o mesmo tempo, independentemente do tamanho. Existe alguma maneira de minimizar esse tempo?
A3: Quando você quiser reduzir o custo do processo para colocar os valores mais, que tal usar a API Sheets? Sobre isso, você pode ver na figura "A2".
Nota:
A justificativa das respostas acima é Benchmark: Ler e escrever planilhas usando o Google Apps Script .
Como comentário de @TheMaster , também acho que seu problema pode ser resolvido por LockService .
- Acho que o script de amostra do LockService pode ser visto no stackoverflow. Ref