SetValues ​​est-il plus lent que setValue?

Aug 26 2020

J'ai un document Google avec script Google Apps Script en cours d'exécution auquel plusieurs personnes contribuent. Un onEditdéclencheur est déclenché lorsque des personnes modifient la feuille. Si je comprends bien, si une personne modifie la feuille, cela déclenche ma onEditfonction de déclenchement.

Si une deuxième personne édite la feuille avant la fin du premier onEdittraitement, elle arrête la première instance et la seconde onEditcommence sans terminer la première.

Pour éviter cela, j'essaie de rendre mon code aussi efficace que possible avec la théorie selon laquelle si le onEditprocessus prend moins de temps, il est moins susceptible de se chevaucher. Pour ce faire, j'ai essayé de minimiser mes lectures / écritures. En utilisant une série d'instructions de journalisation, j'ai suivi des lignes de code qui prennent du temps. J'ai remarqué qu'une de mes setValues()lignes prend près de 6 secondes à s'exécuter. C'est un grand tableau qui est renvoyé sur la feuille après que j'y ai fait des ajustements.

Mes questions:

  1. Un setValues()appel prend-il plus de temps qu'un setValue()?
  2. L' setValues()appel d'un petit tableau prend-il moins de temps que celui setValues()d'un grand tableau?

Je sais que l'un setValues()sera beaucoup plus rapide que 1000 setValue()commandes.

J'avais présumé qu'une écriture sur la feuille devrait prendre à peu près le même temps, quelle que soit sa taille. Y a-t-il moyen de minimiser ce temps?

Réponses

3 Tanaike Aug 27 2020 at 04:33

Q1: Est-ce que a setValues()prend plus de temps qu'un setValue()?

A1: C'est non. À ce sujet, vous pouvez le voir à partir du résultat expérimental suivant.

Q2: un setValues()appel d'un petit tableau prend-il moins de temps qu'un appel setValues()d'un grand tableau?

A2: C'est oui. À ce sujet, vous pouvez le voir à partir du résultat expérimental suivant.

Q3: J'avais présumé qu'une écriture sur la feuille devrait prendre à peu près le même temps, quelle que soit la taille. Est-il possible de minimiser ce temps?

R3: Lorsque vous souhaitez réduire le coût du processus pour mettre davantage les valeurs, que diriez-vous d'utiliser l'API Sheets? À propos de cela, vous pouvez le voir à la figure de "A2".

Remarque:

  • La justification des réponses ci-dessus est Benchmark: lecture et écriture d'une feuille de calcul à l'aide de Google Apps Script .

  • Comme le commentaire de @ TheMaster , je pense également que votre problème pourrait être résolu par LockService .

    • Je pense que l'exemple de script de LockService peut être vu au stackoverflow. Réf