99 votes

Impression vers la console dans Google Apps script ?

Je suis très novice en matière de programmation (j'ai suivi quelques cours de JS sur Codecademy). J'essaie de créer un simple script pour déterminer, si on lui donne une feuille de calcul avec les résultats d'une partie de poker, qui doit payer qui. J'ai ouvert le script de Google Apps, et j'ai é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 contenant le nombre total de joueurs. En exécutant le code, je pensais qu'il allait imprimer "3" dans la console. Mais rien ne s'est produit. Il a dit

"ReferenceError : "console" n'est pas défini."

A) Qu'est-ce que je ne comprends pas dans le fonctionnement de la console script de Google Apps en ce qui concerne l'impression afin que je puisse voir si mon code accomplit ce que je souhaite ?

B) S'agit-il d'un problème de code ?

158voto

Peter Herrmann Points 3955

La console n'est pas disponible car le code s'exécute dans le nuage, et non dans votre navigateur. À la place, utilisez le Enregistreur classe fournie par GAS :

Logger.log(playerArray[3])

et ensuite afficher les résultats dans l'IDE sous View > Logs...

Voici de la documentation sur l'exploitation forestière avec GAS .

Modifier : 2017-07-20 Les apps script fournissent désormais aussi. Journalisation de Stackdriver . Consultez ces journaux dans l'éditeur script sous View - Console Logs.

19voto

skathan Points 365

Pour compléter la solution de vinnief ci-dessus, j'utilise MsgBox comme ceci :

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

et il agit comme un point d'arrêt, arrête le script et affiche la chaîne de caractères dont vous avez besoin dans une fenêtre pop-up. Je trouve que, surtout dans Sheets, où j'ai des problèmes avec Logger.log, cela fournit une solution adéquate la plupart du temps.

13voto

10basetom Points 400

Même si Logger.log() est techniquement la manière correcte d'envoyer quelque chose à la console, mais elle présente quelques inconvénients :

  1. Le résultat peut être un fouillis non structuré et difficile à assimiler rapidement.
  2. Vous devez d'abord exécuter le script, puis cliquer sur View / Logs, ce qui représente deux clics supplémentaires (un seul si vous vous souvenez du raccourci clavier Ctrl+Enter).
  3. Vous devez insérer Logger.log(playerArray) et ensuite, après le débogage, vous voudrez probablement enlever Logger.log(playerArray) d'où une ou deux étapes supplémentaires.
  4. Vous devez cliquer sur OK pour fermer la superposition (encore un clic supplémentaire).

Au lieu de cela, lorsque je veux déboguer quelque chose, j'ajoute des points d'arrêt (en cliquant sur le numéro de ligne) et j'appuie sur le bouton Déboguer (icône de l'insecte). Les points d'arrêt fonctionnent bien lorsque vous assignez quelque chose à une variable, mais pas si bien lorsque vous initiez une variable et que vous voulez jeter un coup d'oeil à l'intérieur à un moment ultérieur, ce qui est similaire à ce que l'op essaie de faire. Dans ce cas, je forcerais une condition de rupture en saisissant "x" (x marque l'endroit !) pour déclencher une erreur d'exécution :

enter image description here

Comparez avec les journaux de consultation :

enter image description here

La console de débogage contient plus d'informations et est beaucoup plus facile à lire que la superposition des 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 voulez garder un code propre. Même si vous entrez "x", vous êtes obligé de vous rappeler de le supprimer dans le cadre du processus de débogage, sinon votre code ne s'exécutera pas (mesure de nettoyage intégrée, youpi).

11voto

Rubén Points 9760

Répondre aux questions du PO

A) Qu'est-ce que je ne comprends pas dans le fonctionnement de la console script de Google Apps en ce qui concerne l'impression afin que je puisse voir si mon code accomplit ce que je souhaite ?

Le code sur les fichiers .gs d'un projet Google Apps script s'exécute sur le serveur plutôt que sur le navigateur web. La façon d'enregistrer les messages était d'utiliser la fonction Journal de bord de la classe .

B) S'agit-il d'un problème de code ?

Comme l'indiquait le message d'erreur, le problème était que console n'a pas été défini, mais aujourd'hui le même code produira une autre erreur :

Erreur de référence : "playerArray" n'est pas défini. (ligne 12, fichier "Code")

C'est parce que le playerArray est défini comme une variable locale. Déplacer la ligne hors de la fonction résoudra ce problème.

var playerArray = [];

function addplayerstoArray(numplayers) {
  for (i=0; i<numplayers; i++) {
    playerArray.push(i);
  }
}  

addplayerstoArray(7);

console.log(playerArray[3])

Maintenant que le code s'exécute sans lancer d'erreurs, au lieu de regarder la console du navigateur, nous devrions regarder le journal de Stackdriver. Depuis l'interface utilisateur de l'éditeur script de Google Apps, cliquez sur View > Enregistrement du Stackdriver .

Addendum


NOTES :

  1. À partir de mai 2022, les journaux seront disponibles dans la page des exécutions pendant 7 jours. De même, lors de l'exécution d'une fonction à partir de l'éditeur Apps script, les logs seront affichés en bas de l'écran.
  2. Stackdriver Logging a été renommé Cloud Logging.

Sur 2017 Google a libéré à tous scripts Stackdriver Logging et a ajouté la console de classe, donc inclure quelque chose comme. console.log('Hello world!') ne déclenchera pas d'erreur mais le journal se trouvera sur le service de journalisation Stackdriver de Google Cloud Platform au lieu de la console du navigateur.

De Google Apps script Notes de version 2017

23 juin 2017

Journalisation de Stackdriver a été retiré de l'accès anticipé. Tous les scripts ont maintenant accès à la journalisation de Stackdriver.

De Journalisation > Journalisation Stackdriver

L'exemple suivant montre comment utiliser l'option console pour enregistrer les 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 string in the log viewer, and the JSON content
  // is displayed in the expanded log structure under "structPayload".
  var parameters = {
      isValid: true,
      content: 'some string',
      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.
}

6voto

Tanya Gupta Points 402

Dans un projet google script 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 le décrit @Peter Herrman. Cependant, si la fonction est créée dans un fichier .html, elle est exécutée sur le navigateur de l'utilisateur et vous pouvez utiliser console.log. La console du navigateur Chrome peut être consulté le site par Ctrl Shift J sur Windows/Linux ou Cmd Opt J sur Mac

Si vous voulez utiliser Logger.log sur un fichier html, vous pouvez utiliser une balise scriptlet pour appeler la fonction Logger.log à partir du fichier html. Pour ce faire, vous devez insérer < ? Logger.log(quelque chose) ?> en remplaçant quelque chose par ce que vous voulez enregistrer. Les scriptlets standard, qui utilisent la syntaxe < ? ... ?>, exécutent du code sans afficher explicitement du contenu sur la page.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X