In Google Sheets können Sie einige Skriptfunktionen hinzufügen. Ich füge etwas für das onEdit
Ereignis hinzu, kann aber nicht sagen, ob es funktioniert. Soweit ich das beurteilen kann, können Sie ein Live-Ereignis nicht über Google Sheets debuggen. Sie müssen dies daher über den Debugger tun. Dies ist sinnlos, da das an meine onEdit()
Funktion übergebene Ereignisargument immer undefiniert ist, wenn ich es über das ausführe Script Editor
.
Also habe ich versucht, die Logger.log
Methode zu verwenden, um einige Daten zu protokollieren, wenn die onEdit
Funktion aufgerufen wird, aber auch dies scheint nur zu funktionieren, wenn es von der ausgeführt wird Script Editor
. Wenn ich es von der aus Script Editor
starte, kann ich die Protokolle anzeigen, indem ich zu geheView->Logs...
Ich hatte gehofft, dass ich die Protokolle sehen kann, wenn das Ereignis tatsächlich ausgeführt wird, aber ich kann es nicht herausfinden.
Wie debugge ich dieses Zeug?
quelle
Logger.log('firstLog');MailApp.sendEmail({to:'[email protected]',subject: "subject here ^_^",body: Logger.getLog()});
Antworten:
AKTUALISIEREN:
Wie in dieser Antwort geschrieben,
Die Stackdriver-Protokollierung ist derzeit die bevorzugte Protokollierungsmethode.
Verwenden Sie
console.log()
diese Option, um sich bei Stackdriver anzumelden.Logger.log
Sie erhalten entweder (eventuell) eine E-Mail mit Fehlern, die in Ihren Skripten aufgetreten sind, oderScript Editor
Sie können das Protokoll der letzten Ausführungsfunktion anzeigen, indem Sie aufView->Logs
(noch im Skripteditor) gehen. Auch dies zeigt Ihnen nur alles an, was von der letzten Funktion protokolliert wurde, die Sie von innen ausgeführt habenScript Editor
.Das Skript, mit dem ich arbeiten wollte, hatte mit Tabellenkalkulationen zu tun. Ich habe eine Tabellenkalkulations-Checkliste erstellt, in der Elemente nach Prioritäten und dergleichen sortiert wurden.
Die einzigen Trigger, die ich für dieses Skript installiert habe, waren die Trigger onOpen und onEdit. Das Debuggen des onEdit-Triggers war am schwierigsten herauszufinden, da ich immer wieder dachte, wenn ich in meiner onEdit-Funktion einen Haltepunkt setze, die Tabelle öffne und eine Zelle bearbeite, würde mein Haltepunkt ausgelöst. Das ist nicht der Fall.
Um zu simulieren, dass ich eine Zelle bearbeitet habe, musste ich allerdings etwas in der eigentlichen Tabelle tun. Alles, was ich getan habe, war sicherzustellen, dass die Zelle, die ich als "bearbeitet" behandeln wollte, ausgewählt war, und dann
Script Editor
ging ich zuRun->onEdit
. Dann würde mein Haltepunkt getroffen werden.Ich musste jedoch aufhören, das Ereignisargument zu verwenden, das an die onEdit-Funktion übergeben wird - Sie können dies nicht simulieren, indem Sie dies tun
Run->onEdit
. Alle Informationen, die ich aus der Tabelle benötigte, wie z. B. welche Zelle ausgewählt wurde usw., musste ich manuell herausfinden.Wie auch immer, lange Antwort, aber ich habe es irgendwann herausgefunden.
EDIT :
Wenn Sie die von mir erstellte ToDo-Checkliste sehen möchten, können Sie sie hier überprüfen
(Ja, ich weiß, dass jeder es bearbeiten kann - das ist der Grund, es zu teilen!)
Ich hatte gehofft, dass Sie damit auch das Drehbuch sehen können. Da Sie es dort nicht sehen können, ist es hier:
quelle
True - Definieren Sie das Ereignisargument für das Debuggen selbst. Siehe Wie kann ich eine Triggerfunktion in GAS testen?
Wieder wahr, aber es gibt Hilfe. Die BetterLog-Bibliothek von Peter Hermann leitet alle Protokolle in eine Tabelle um und ermöglicht die Protokollierung auch von Code, der nicht an eine Instanz des Editors / Debuggers angehängt ist.
Wenn Sie beispielsweise in einem in einer Tabelle enthaltenen Skript codieren, können Sie nur diese eine Zeile oben in Ihre Skriptdatei einfügen, und alle Protokolle werden in eine Tabelle "Protokolle" in der Tabelle eingefügt. Kein anderer Code erforderlich, verwenden
Logger.log()
Sie ihn wie gewohnt:quelle
console.log()
sollte jetzt die beste Antwort seinUpdate 2017: Die Stackdriver-Protokollierung ist jetzt für Google Apps Script verfügbar. Gehen Sie in der Menüleiste des Skript-Editors zu:
View > Stackdriver Logging
Zum Anzeigen oder Streamen der Protokolle.console.log () schreibt
DEBUG
Level-NachrichtenBeispielprotokollierung
onEdit()
:Dann überprüfen Sie die Protokolle in den Stackdriver UI markierte
onEdit() Event Object
die Ausgabe zu sehenquelle
Logger.log
. Wie unterscheidet sich das von dem,console.log
was Sie verwenden? Ich bin sehr neu in den Tools und versuche nur herauszufinden, was alles ist.Ein bisschen hacky, aber ich habe ein Array namens "console" erstellt, und wann immer ich auf die Konsole ausgeben wollte, habe ich auf das Array verschoben. Wann immer ich dann die tatsächliche Ausgabe sehen wollte, kehrte ich einfach zurück,
console
anstatt zu dem, was ich zuvor zurückgegeben hatte.quelle
console.log('smth')
funktioniert perfekt, aber wie wäre es mit GAS?I just returned console
wie geben Sie es aus?Wenn Sie den Skripteditor geöffnet haben, sehen Sie die Protokolle unter Ansicht-> Protokolle. Wenn Ihr Skript über einen Onedit-Trigger verfügt, nehmen Sie eine Änderung an der Tabelle vor, die die Funktion mit dem in einer zweiten Registerkarte geöffneten Skripteditor auslösen soll. Gehen Sie dann zur Registerkarte Skripteditor und öffnen Sie das Protokoll. Sie sehen, was auch immer Ihre Funktion an den Logger übergibt.
Grundsätzlich schreibt das Ereignis, solange der Skripteditor geöffnet ist, in das Protokoll und zeigt es für Sie an. Es wird nicht angezeigt, ob sich jemand anderes in der Datei befindet.
quelle
Ich habe diese Beiträge durchgesehen und irgendwie eine einfache Antwort gefunden, die ich hier für diejenigen poste, die kurze und süße Lösungen wollen:
console.log("Hello World")
in Ihrem Skript.quelle
Ich habe das gleiche Problem, ich habe das unten im Web irgendwo gefunden ....
Event-Handler in Docs sind allerdings etwas knifflig. Da Dokumente mehrere gleichzeitige Änderungen durch mehrere Benutzer verarbeiten können, werden die Ereignishandler serverseitig behandelt. Das Hauptproblem bei dieser Struktur besteht darin, dass ein Ereignisauslöserskript auf dem Server fehlschlägt, wenn es fehlschlägt. Wenn Sie die Debug-Informationen anzeigen möchten, müssen Sie im Trigger-Menü einen expliziten Trigger einrichten, der Ihnen die Debug-Informationen per E-Mail sendet, wenn das Ereignis fehlschlägt. Andernfalls schlägt es stillschweigend fehl.
quelle
Es ist alles andere als elegant, aber beim Debuggen logge ich mich oft beim Logger ein und verwende dann getLog () , um dessen Inhalt abzurufen. Dann habe ich entweder:
Im Wesentlichen wird es nur zu einem JavaScript-Ausgabeproblem .
Es fehlt grob die Funktionalität moderner
console.log()
Implementierungen, aber der Logger hilft immer noch beim Debuggen von Google Scripts.quelle
Nur als Hinweis. Ich habe eine Testfunktion für meine Tabelle erstellt. Ich benutze die Variable Google Throws in der Funktion onEdit (e) (ich habe es e genannt). Dann habe ich eine Testfunktion wie folgt erstellt:
Wenn Sie diese Testfunktion aufrufen, wird der gesamte Code so ausgeführt, wie Sie ein Ereignis in der Tabelle hatten. Ich habe gerade die Möglichkeit der Zelle eingegeben, die ich bearbeitet habe, was mir ein unerwartetes Ergebnis gebracht hat. Ich habe den Wert als den Wert festgelegt, den ich in die Zelle eingegeben habe. OBS! Weitere Variablen, die Google der Funktion gibt, finden Sie hier: https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
quelle
Derzeit sind Sie auf die containergebundene Art der Verwendung von Skripten in Dokumenten beschränkt. Wenn Sie ein neues Skript außerhalb von Dokumenten erstellen, können Sie Informationen in eine Google-Tabelle exportieren und wie ein Protokollierungswerkzeug verwenden.
Zum Beispiel in Ihrem ersten Codeblock
Wenn ich mit GAS arbeite, sind zwei Monitore (Sie können zwei Fenster verwenden) eingerichtet, von denen einer die GAS-Umgebung und der andere die SS enthält, damit ich Informationen schreiben und protokollieren kann.
quelle
Die Entwicklungskonsole protokolliert vom App-Skript ausgelöste Fehler. Sie können also einfach einen Fehler auslösen, um ihn als normales console.log zu protokollieren. Die Ausführung wird gestoppt, es kann jedoch für das schrittweise Debuggen nützlich sein.
wird in der Konsole ähnlich wie angezeigt
console.log('hello world')
quelle
Debuggen Sie einfach Ihren Tabellenkalkulationscode wie folgt:
Shows wie diese:
quelle
onEdit
)