Impression sur la console dans Google Apps Script?

Je suis très novice en programmation (j’ai suivi certains cours de JS sur Codecademy). J’essaie de créer un script simple pour déterminer, si on lui donne un tableur avec les résultats d’un jeu de poker, qui doit payer qui. J’ai ouvert le script Google Apps et écrit ce qui suit pour commencer:

function addplayerstoArray(numplayers) { var playerArray = []; for (i=0; i<numplayers; i++) { playerArray.push(i); } } addplayerstoArray(7); console.log(playerArray[3]) 

L’idée est de créer un tableau avec le nombre total de joueurs. Lors de l’exécution du code, j’ai pensé qu’il imprimerait “3” à la console. Mais rien ne s’est passé. Ça disait

“ReferenceError:” la console “n’est pas définie.”

A) Qu’est-ce que je ne comprends pas sur la façon dont la console Script de Google Apps fonctionne en ce qui concerne l’impression afin que je puisse voir si mon code réalise ce que je souhaite?

B) Est-ce un problème avec le code?

La console n’est pas disponible car le code s’exécute dans le cloud, pas dans votre navigateur. Utilisez plutôt la classe Logger fournie par GAS:

 Logger.log(playerArray[3]) 

puis affichez les résultats dans l’EDI sous Afficher> Journaux …

Voici une documentation sur la journalisation avec GAS .

Edit: 2017-07-20 Apps script fournit maintenant également Stackdriver Logging . Affichez ces journaux dans l’éditeur de script sous Afficher – Journaux de la console.

Juste pour construire sur la solution de piratage de vinnief ci-dessus, j’utilise MsgBox comme ceci:

 Browser.msgBox('BorderoToMasortingz', Browser.Buttons.OK_CANCEL); 

et il agit un peu comme un point d’arrêt, arrête le script et affiche n’importe quelle chaîne dont vous avez besoin dans une fenêtre contextuelle. Je trouve en particulier dans Sheets, où j’ai des problèmes avec Logger.log, cela fournit une solution de contournement adéquate la plupart du temps.

Même si Logger.log() est techniquement le moyen correct de générer quelque chose sur la console, il comporte quelques inconvénients:

  1. La sortie peut être un désordre non structuré et difficile à digérer rapidement.
  2. Vous devez d’abord exécuter le script, puis cliquer sur Afficher / Journaux, ce qui correspond à deux clics supplémentaires (un si vous vous souvenez du raccourci clavier Ctrl + Entrée).
  3. Vous devez insérer Logger.log(playerArray) , puis après le débogage, vous voudrez probablement supprimer Logger.log(playerArray) , d’où une ou deux étapes supplémentaires.
  4. Vous devez cliquer sur OK pour fermer la superposition (encore un autre clic supplémentaire).

Au lieu de cela, chaque fois que je veux déboguer quelque chose, j’ajoute des points d’arrêt (cliquez sur le numéro de ligne) et appuyez sur le bouton Déboguer (icône de bogue). Les points d’arrêt fonctionnent bien lorsque vous assignez quelque chose à une variable, mais pas si vous lancez une variable et souhaitez y jeter un coup d’œil ultérieurement, ce qui est similaire à ce que op essaie de faire. Dans ce cas, je forcerais une condition de rupture en entrant “x” (x indique l’emplacement!) Pour lancer une erreur d’exécution:

entrer la description de l'image ici

Comparez avec les journaux de visualisation:

entrer la description de l'image ici

La console de débogage contient plus d’informations et est beaucoup plus facile à lire que la superposition de journaux. Un avantage mineur de cette méthode est que vous n’avez jamais à vous soucier de polluer votre code avec un tas de commandes de journalisation si vous devez garder un code propre. Même si vous entrez “x”, vous devez vous souvenir de le supprimer dans le cadre du processus de débogage, sinon votre code ne fonctionnera pas (mesure de nettoyage intégrée, yay).

Dans un projet de script Google, vous pouvez créer des fichiers HTML (exemple: index.html) ou des fichiers gs (exemple: code.gs). Les fichiers .gs sont exécutés sur le serveur et vous pouvez utiliser Logger.log comme décrit par @Peter Herrman. Toutefois, si la fonction est créée dans un fichier .html, elle est en cours d’exécution sur le navigateur de l’utilisateur et vous pouvez utiliser console.log. La console du navigateur Chrome peut être visualisée par Ctrl Shift J sur Windows / Linux ou Cmd Opt J sur Mac

Si vous souhaitez utiliser Logger.log sur un fichier HTML, vous pouvez utiliser un scriptlet pour appeler la fonction Logger.log à partir du fichier HTML. Pour ce faire, vous insérez Logger.log (quelque chose)?> Remplacer quelque chose avec ce que vous voulez vous connecter. Les scriptlets standard, qui utilisent la syntaxe , exécuter du code sans afficher explicitement le contenu sur la page.

Répondre aux questions de l’OP

A) Qu’est-ce que je ne comprends pas sur la façon dont la console Script de Google Apps fonctionne en ce qui concerne l’impression afin que je puisse voir si mon code réalise ce que je souhaite?

Le code sur les fichiers .gs d’un projet Script Google Apps s’exécute sur le serveur plutôt que sur le navigateur Web. La manière de consigner les messages consistait à utiliser le Class Logger .

B) Est-ce un problème avec le code?

Comme le message d’erreur le disait, le problème était que la console n’était pas définie, mais aujourd’hui, le même code produirait une autre erreur:

ReferenceError: “playerArray” n’est pas défini. (ligne 12, fichier “Code”)

En effet, le playerArray est défini en tant que variable locale. Déplacer la ligne hors de la fonction résoudra ce problème.

 var playerArray = []; function addplayerstoArray(numplayers) { for (i=0; i 

Maintenant que le code s'exécute sans lancer d'erreurs, au lieu de regarder la console du navigateur, nous devons regarder la journalisation Stackdriver. Dans l'interface utilisateur de l'éditeur de script Google Apps, cliquez sur Affichage> Consignation de stack .

Addenda

En 2017, Google a publié tous les scripts Stackdriver Logging et a ajouté la console de classe, donc inclure quelque chose comme console.log('Hello world!') Ne console.log('Hello world!') pas d'erreur, mais le journal sera sur Google Cloud Platform Stackdriver Logging Service console.

À partir des notes de version du script Google Apps 2017

23 juin 2017

Stackdriver Logging a été retiré de l'access anticipé. Tous les scripts ont maintenant access à la journalisation Stackdriver.

À partir de la journalisation> Journalisation de stack

L'exemple suivant montre comment utiliser le service de console pour enregistrer des informations dans Stackdriver.

 function measuringExecutionTime() { // A simple INFO log message, using sprintf() formatting. console.info('Timing the %s function (%d arguments)', 'myFunction', 1); // Log a JSON object at a DEBUG level. The log is labeled // with the message ssortingng in the log viewer, and the JSON content // is displayed in the expanded log structure under "structPayload". var parameters = { isValid: true, content: 'some ssortingng', timestamp: new Date() }; console.log({message: 'Function Input', initialData: parameters}); var label = 'myFunction() time'; // Labels the timing log entry. console.time(label); // Starts the timer. try { myFunction(parameters); // Function to time. } catch (e) { // Logs an ERROR message. console.error('myFunction() yielded an error: ' + e); } console.timeEnd(label); // Stops the timer, logs execution duration. }