SetValues ​​é mais lento do que setValue?

Aug 26 2020

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:

  1. Uma setValues()chamada demora mais do que um setValue()?
  2. Uma setValues()chamada de um array pequeno leva menos tempo do que uma chamada de um array setValues()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

3 Tanaike Aug 27 2020 at 04:33

Q1: A setValues()demora mais do que a setValue()?

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 array setValues()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