wake-up-neo.com

In Google Apps Script auf die Konsole drucken?

Ich bin sehr neu in der Programmierung (habe einige der JS-Kurse über Codecademy besucht). Ich versuche ein einfaches Skript zu erstellen, um zu bestimmen, wer wen bezahlen soll, wenn eine Tabelle mit Ergebnissen aus einem Pokerspiel vorliegt. Ich habe Google Apps Script geöffnet und Folgendes geschrieben, um zu beginnen:

function addplayerstoArray(numplayers) {

  var playerArray = [];

  for (i=0; i<numplayers; i++) {
    playerArray.Push(i);
  }
}  

addplayerstoArray(7);

console.log(playerArray[3])

Die Idee ist, ein Array mit der Gesamtzahl der Spieler darin zu erstellen. Beim Ausführen des Codes dachte ich, er würde "3" auf der Konsole ausgeben. Aber nichts ist passiert. Es sagte

"ReferenceError:" console "ist nicht definiert."

A) Was verstehe ich nicht darüber, wie die Google Apps Script-Konsole in Bezug auf das Drucken funktioniert, damit ich sehen kann, ob mein Code das erreicht, was ich möchte?

B) Ist es ein Problem mit dem Code?

62
jim_shook

Die Konsole ist nicht verfügbar, da der Code in der Cloud und nicht in Ihrem Browser ausgeführt wird. Verwenden Sie stattdessen die von GAS bereitgestellte Klasse Logger :

Logger.log(playerArray[3])

und dann die Ergebnisse in IDE unter Ansicht> Protokolle ... anzeigen.

Hier ist eine Dokumentation zu Protokollierung mit GAS .

Edit: 2017-07-20 Apps-Skript bietet jetzt auch Stackdriver Logging . Zeigen Sie diese Protokolle im Skripteditor unter Ansicht - Konsolenprotokolle an.

108
Peter Herrmann

Um auf der obigen Hacky-Lösung von vinnief aufzubauen, benutze ich MsgBox wie folgt:

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

und es verhält sich wie ein Haltepunkt, stoppt das Skript und gibt die benötigte Zeichenfolge in einem Popup-Fenster aus. Ich finde vor allem in Sheets, wo ich Probleme mit Logger.log habe, dass dies die meiste Zeit eine angemessene Problemumgehung bietet.

13
skathan

Beantwortung der OP-Fragen

A) Was verstehe ich nicht darüber, wie die Google Apps Script-Konsole in Bezug auf das Drucken funktioniert, damit ich sehen kann, ob mein Code das erreicht, was ich möchte?

Der Code für .gs-Dateien eines Google Apps Script-Projekts wird nicht im Webbrowser, sondern auf dem Server ausgeführt. Die Möglichkeit, Nachrichten zu protokollieren, bestand in der Verwendung von Class Logger .

B) Ist es ein Problem mit dem Code?

Wie die Fehlermeldung besagte, bestand das Problem darin, dass console nicht definiert wurde, heutzutage jedoch derselbe Code einen anderen Fehler auslöst:

ReferenceError: "playerArray" ist nicht definiert. (Zeile 12, Datei "Code")

Das liegt daran, dass das playerArray als lokale Variable definiert ist. Bewegen Sie die Linie aus der Funktion heraus, um dies zu beheben.

var playerArray = [];

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

addplayerstoArray(7);

console.log(playerArray[3])

Jetzt, da der Code fehlerfrei ausgeführt wird, sollten wir uns die Stackdriver-Protokollierung ansehen, um die Browserkonsole zu betrachten. Klicken Sie in der Benutzeroberfläche des Google Apps-Skripteditors auf Ansicht> Stackdriver-Protokollierung .

Nachtrag

Ab 2017 hat Google für alle Skripte die Stackdriver-Protokollierung freigegeben und die Klassenkonsole hinzugefügt. Wenn Sie also beispielsweise console.log('Hello world!') eingeben, wird kein Fehler ausgegeben, aber das Protokoll wird im Stackdriver-Protokollierungsdienst von Google Cloud Platform anstelle der Browserkonsole gespeichert.

Von Versionshinweise zu Google Apps Script 2017

23. Juni 2017

Stackdriver Logging wurde aus dem Early Access verschoben. Alle Skripte haben jetzt Zugriff auf die Stackdriver-Protokollierung.

Von Protokollierung> Stackdriver-Protokollierung

Das folgende Beispiel zeigt, wie mit dem Dienst console Informationen in Stackdriver protokolliert werden.

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.
}
8
Rubén

In einem Google Script-Projekt können Sie HTML-Dateien (Beispiel: index.html) oder gs-Dateien (Beispiel: code.gs) erstellen. Die .gs-Dateien werden auf dem Server ausgeführt und Sie können Logger.log wie von @Peter Herrman beschrieben verwenden. Wenn die Funktion jedoch in einer HTML-Datei erstellt wurde, wird sie im Browser des Benutzers ausgeführt und Sie können console.log verwenden. Die Chrome Browserkonsole kann angezeigt per Strg + Umschalt + J unter Windows/Linux oder Cmd + Opt + J unter Mac sein

Wenn Sie Logger.log für eine HTML-Datei verwenden möchten, können Sie mit einem Scriptlet die Funktion Logger.log aus der HTML-Datei aufrufen. Dazu würden Sie einfügen <? Logger.log (etwas)?> Ersetzen Sie etwas durch das, was Sie protokollieren möchten. Standard-Scriptlets, die die Syntax <? Verwenden ...?> Code ausführen, ohne Inhalt explizit auf der Seite auszugeben.

6
Tanya Gupta

Obwohl Logger.log() technisch die richtige Methode ist, um etwas auf der Konsole auszugeben, hat dies einige Probleme:

  1. Die Ausgabe kann unstrukturiert und schwer verdaulich sein.
  2. Sie müssen zuerst das Skript ausführen und dann auf Ansicht/Protokolle klicken. Dies sind zwei zusätzliche Klicks (einer, wenn Sie sich an die Tastenkombination Strg + Eingabe erinnern).
  3. Sie müssen Logger.log(playerArray) einfügen und nach dem Debuggen möchten Sie wahrscheinlich Logger.log(playerArray) entfernen, daher weitere 1-2 Schritte.
  4. Sie müssen auf OK klicken, um das Overlay zu schließen (noch ein zusätzlicher Klick).

Wenn ich etwas debuggen möchte, füge ich stattdessen Haltepunkte hinzu (klicke auf die Zeilennummer) und drücke auf die Schaltfläche Debuggen (Fehlersymbol). Haltepunkte funktionieren gut, wenn Sie einer Variablen etwas zuweisen, aber nicht so gut, wenn Sie eine Variable initiieren und zu einem späteren Zeitpunkt einen Blick hineinwerfen möchten. Dies ähnelt dem, was die Operation versucht. In diesem Fall würde ich eine Unterbrechungsbedingung erzwingen, indem ich "x" eingebe (x markiert den Punkt!), Um einen Laufzeitfehler auszulösen:

enter image description here

Mit dem Anzeigen von Protokollen vergleichen:

enter image description here

Die Debug-Konsole enthält mehr Informationen und ist viel einfacher zu lesen als das Logs-Overlay. Ein kleiner Vorteil dieser Methode besteht darin, dass Sie sich niemals Sorgen machen müssen, Ihren Code mit einer Reihe von Protokollierungsbefehlen zu verschmutzen, wenn es Ihre Sache ist, sauberen Code zu halten. Selbst wenn Sie "x" eingeben, müssen Sie daran denken, es als Teil des Debugging-Prozesses zu entfernen, da sonst Ihr Code nicht ausgeführt wird (integrierte Bereinigungsmaßnahme, yay).

6
thdoan