Maison >interface Web >js tutoriel >Comment puis-je optimiser le script Google Apps pour réduire les longs temps de traitement causés par les appels fréquents « getValue() » et « setValue() » ?
Temps de traitement long : résolution de getValue() et des insertions de cellules
Dans le code que vous avez fourni, le problème du temps de traitement excessif provient du fréquent utilisation des méthodes Range.getValue() et Range.setValue() dans une boucle. Lorsque le script parcourt chaque cellule de la colonne A, il lit et écrit les valeurs plusieurs fois, ce qui ralentit considérablement l'exécution.
Optimisation du code
Pour remédier à cette performance problème, il est essentiel de minimiser les appels aux services, principalement axés sur la réduction du nombre d'opérations Range.getValue() et Range.setValue(). Voici comment optimiser votre code :
Lectures par lots
Au lieu de récupérer la valeur de chaque cellule individuellement à l'aide de range1.getValue(), lisez les valeurs de tous les cellules requises en une seule opération par lots. Par exemple, si vous avez besoin des valeurs de la ligne actuelle et des trois lignes suivantes, vous pouvez utiliser s.getRange(row 1, 1, 4, 1).getValues() pour les récupérer toutes en même temps.
Écritures par lots
De même, au lieu de définir les valeurs de cellules individuelles, rassemblez toutes les valeurs qui doivent être écrites, puis attribuez-les en une seule opération par lots. Par exemple, si vous souhaitez écrire des valeurs dans la ligne actuelle et les trois lignes suivantes, vous pouvez utiliser range1.offset(0, 0, 4).setValues([["data 1"], ["data 2"], ["données 3"], ["données 4"]]); pour ce faire.
Exemple d'optimisation
Voici une version optimisée de votre code qui intègre ces optimisations :
function format() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = ss.getActiveSheet(); var lastRow = s.getRange("A:A").getLastRow(); var allValues = s.getRange(1, 1, lastRow, 1).getValues(); // Loop through all rows in the spreadsheet for (var row = 0; row < lastRow; row++) { var cellValue = allValues[row][0]; if (typeof cellValue === 'number') { continue; } } }
En utilisant ces optimisations , vous pouvez réduire considérablement le nombre d'appels aux services et améliorer les performances de votre script. Cette approche réduit le nombre d'appels aux services de 8 par boucle à seulement 2, ce qui entraîne une diminution significative du temps de traitement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!