Drukowanie na konsoli w Google Apps Script?

Jestem nowy w programowaniu (brałem udział w kursach js na temat Codecademy). Staram się stworzyć prosty skrypt do ustalenia, jeśli dany arkusz kalkulacyjny z wynikami z gry w pokera, kto powinien komu zapłacić. Otworzyłem skrypt Google Apps i napisałem na początek:

function addplayerstoArray(numplayers) {

  var playerArray = [];

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

addplayerstoArray(7);

console.log(playerArray[3])

Chodzi o stworzenie tablicy z całkowitą liczbą graczy w niej. Podczas uruchamiania kodu myślałem, że wydrukuje" 3 " na konsoli. Ale nic się nie stało. Powiedział

"ReferenceError:" console " nie jest zdefiniowane."

A) czego nie rozumiem, jak działa konsola skryptów Google Apps w odniesieniu do drukowania, aby zobaczyć, czy mój kod spełnia to, co chcę?

B) czy to problem z kodem?

Author: tehhowch, 2012-09-12

5 answers

Konsola nie jest dostępna, ponieważ kod działa w chmurze, a nie w przeglądarce. Zamiast tego użyj klasy Logger dostarczonej przez GAS:

Logger.log(playerArray[3])

A następnie Wyświetl wyniki w IDE w widoku > dzienniki...

Oto dokumentacja logowania za pomocą gazu .

Edycja: 2017-07-20 Apps script umożliwia teraz również rejestrowanie Stackdriver . Wyświetl te dzienniki w Edytorze skryptów w obszarze dzienniki View-Console.

 91
Author: Peter Herrmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-20 00:48:08

Aby zbudować na powyższym hackym rozwiązaniu vinniefa, używam MsgBox w następujący sposób:

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

I działa jak punkt przerwania, zatrzymuje skrypt i wyświetla dowolny ciąg znaków do wyskakującego okna. Znajduję zwłaszcza w arkuszach, gdzie mam problemy z Loggerem.log, to zapewnia odpowiednie obejście najczęściej.

 10
Author: skathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-03 14:21:11

Mimo że Logger.log() jest technicznie poprawnym sposobem na wyjście czegoś do konsoli, ma kilka irytacji:

  1. wyjście może być niestrukturalnym bałaganem i trudnym do szybko strawienia.
  2. musisz najpierw uruchomić skrypt, a następnie kliknąć View / Logs, czyli dwa dodatkowe kliknięcia (jedno jeśli pamiętasz skrót klawiaturowy Ctrl+Enter).
  3. musisz wstawić Logger.log(playerArray), a następnie po debugowaniu prawdopodobnie chcesz usunąć Logger.log(playerArray), stąd kolejne 1-2 kroki.
  4. ty trzeba kliknąć na OK, aby zamknąć nakładkę(kolejne dodatkowe kliknięcie).

Zamiast tego, gdy chcę coś debugować, dodaję punkty przerwania (klikam na numer linii) i naciskam przycisk debugowania (ikona błędu). Punkty przerwania działają dobrze, gdy przypisujesz coś do zmiennej, ale nie tak dobrze, gdy inicjujesz zmienną i chcesz zajrzeć do jej wnętrza w późniejszym momencie, co jest podobne do tego, co próbuje zrobić op. W tym przypadku, chciałbym wymusić warunek break wpisując " x "(znaki x miejsce.) do wyrzucenia błędu run-time:

Tutaj wpisz opis obrazka

Porównaj z dziennikami przeglądania:

Tutaj wpisz opis obrazka

Konsola debugowania zawiera więcej informacji i jest o wiele łatwiejsza do odczytania niż nakładka dzienników. Jedną z mniejszych zalet tej metody jest to, że nigdy nie musisz się martwić o zanieczyszczanie kodu za pomocą kilku poleceń logowania, jeśli utrzymanie czystego kodu jest twoją rzeczą. Nawet jeśli wpiszesz "x", musisz pamiętać o usunięciu go w ramach debugowania przetworzyć, albo twój kod nie zostanie uruchomiony (wbudowana miara czyszczenia, yay).

 5
Author: thdoan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-17 15:16:53

W projekcie google script można tworzyć pliki html (przykład: index.html) lub pliki gs (example:code.gs). pliki .gs są wykonywane na serwerze i można użyć Loggera.log jak opisuje @ Peter Herrman. Jednak jeśli funkcja jest utworzona w .plik html jest on wykonywany w przeglądarce użytkownika i można użyć konsoli.log. Konsola przeglądarki Chrome może być wyświetlana przez Ctrl Shift J na Windows/Linux lub Cmd Opt J na Mac

Jeśli chcesz użyć Loggera.Zaloguj się do pliku html może używać skryptów do wywołania Loggera.funkcja log z pliku html. Aby to zrobić należy wstawić Logger.log (coś) ?> zastąpienie czegoś czym chcesz się zalogować. Standardowe skrypty, które używają składni ... ?> , wykonaj kod bez jawnego wysyłania zawartości na stronę.

 4
Author: Tanya Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-14 15:04:30

Odpowiadanie na pytania OP

A) czego nie rozumiem, jak działa konsola skryptów Google Apps w odniesieniu do drukowania, aby zobaczyć, czy mój kod spełnia to, co chcę?

Kod na plikach. gs projektu skryptu Google Apps uruchamiany na serwerze, a nie w przeglądarce internetowej. Sposobem logowania wiadomości było użycie klasy Logger .

B) czy to problem z kodem?

Jak powiedział komunikat o błędzie, problem polegał na tym, że console nie został zdefiniowany, ale obecnie ten sam kod wyrzuci inny błąd:

ReferenceError:" playerArray " nie jest zdefiniowany. (linia 12, plik "kod")

To dlatego, że playerArray jest zdefiniowany jako zmienna lokalna. Przesunięcie linii z funkcji rozwiąże ten problem.

var playerArray = [];

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

addplayerstoArray(7);

console.log(playerArray[3])

Teraz, gdy kod wykonuje się bez rzucania błędów, zamiast spojrzeć na konsolę przeglądarki powinniśmy spojrzeć na rejestrowanie Stackdriver. Ze skryptu Google Apps edytor UI kliknij na widok > rejestrowanie Stackdriver.

Dodatek

W 2017 roku Google wydało do wszystkich skryptów rejestrowanie Stackdriver i dodało konsolę klasy, więc włączenie czegoś takiego jak console.log('Hello world!') nie spowoduje błędu, ale dziennik będzie na usłudze rejestrowania Stackdriver platformy Google Cloud Platform zamiast konsoli przeglądarki.

From Google Apps Script Release Notes 2017

Czerwiec 23, 2017

Stackdriver Logowanie zostało wycofane z wcześniejszego dostępu. Wszystkie skrypty mają teraz dostęp do dziennika Stackdriver.

From Logging > Stackdriver logging

Poniższy przykład pokazuje, jak używać usługiconsole do logowania informacji w 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.
}
 3
Author: Rubén,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-19 00:36:39