it-swarm.com.ru

Печать на консоль в Google Apps Script?

Я очень новичок в программировании (прошел некоторые курсы JS по Codecademy). Я пытаюсь создать простой сценарий, чтобы определить, если дана электронная таблица с результатами покерной игры, кто должен кому платить. Я открыл Google Apps Script и написал следующее, чтобы начать:

function addplayerstoArray(numplayers) {

  var playerArray = [];

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

addplayerstoArray(7);

console.log(playerArray[3])

Идея состоит в том, чтобы создать массив с общим количеством игроков в нем. При запуске кода я думал, что он выведет "3" на консоль. Но ничего не случилось. Сказано

"ReferenceError:" console "не определена."

А) Что я не понимаю о том, как работает консоль скрипта Google Apps в отношении печати, чтобы я мог видеть, выполняет ли мой код то, что я хотел?

Б) это проблема с кодом?

58
jim_shook

Консоль недоступна, поскольку код работает в облаке, а не в вашем браузере. Вместо этого используйте класс Logger , предоставленный GAS:

Logger.log(playerArray[3])

а затем просмотрите результаты в IDE под View> Logs ...

Вот некоторая документация по ведение журнала с помощью GAS .

Правка: 2017-07-20 Сценарий приложений теперь также обеспечивает ведение журнала Stackdriver . Просмотрите эти журналы в редакторе сценариев в разделе View - Console Logs.

103
Peter Herrmann

Просто для того, чтобы использовать хакерское решение Виннифа выше, я использую MsgBox следующим образом:

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

и он действует как точка останова, останавливает сценарий и выводит любую нужную строку во всплывающее окно. Я нахожу особенно в Sheets, где у меня проблемы с Logger.log, это обеспечивает адекватный обходной путь в большинстве случаев.

12
skathan

В проекте скрипта Google вы можете создавать html-файлы (пример: index.html) или gs-файлы (пример: code.gs). Файлы .gs выполняются на сервере, и вы можете использовать Logger.log, как описывает @Peter Herrman. Однако, если функция создана в файле .html, она выполняется в браузере пользователя, и вы можете использовать console.log. Консоль браузера Chrome можно просмотреть с помощью Ctrl Shift J в Windows/Linux или Cmd Opt J на ​​Mac

Если вы хотите использовать Logger.log для html-файла, вы можете использовать scriptlet для вызова функции Logger.log из html-файла. Для этого вы должны вставить <? Logger.log (что-то)?> заменить что-то на что вы хотите войти. Стандартные скриптлеты, в которых используется синтаксис <? ...?>, выполнить код без явного вывода контента на страницу.

5
Tanya Gupta

Отвечая на вопросы ОП

А) Что я не понимаю о том, как работает консоль скрипта Google Apps в отношении печати, чтобы я мог видеть, выполняет ли мой код то, что я хотел?

Код в файлах .gs проекта Google Apps Script запускается на сервере, а не в веб-браузере. Чтобы регистрировать сообщения, нужно использовать Class Logger .

Б) это проблема с кодом?

Как говорится в сообщении об ошибке, проблема заключалась в том, что console не было определено, но в настоящее время тот же код будет выдавать другую ошибку:

ReferenceError: "playerArray" не определен. (строка 12, файл "Код")

Это потому, что playerArray определен как локальная переменная. Перемещение строки из функции решит это.

var playerArray = [];

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

addplayerstoArray(7);

console.log(playerArray[3])

Теперь, когда код выполняется без ошибок, вместо этого, чтобы взглянуть на консоль браузера, мы должны взглянуть на ведение журнала Stackdriver. В пользовательском интерфейсе редактора скриптов Google Apps нажмите "Просмотр"> "Ведение журнала Stackdriver" .

Добавление

В 2017 году Google выпустил для всех сценариев ведение журнала Stackdriver и добавил консоль класса, поэтому включение чего-то вроде console.log('Hello world!') не вызовет ошибку, но журнал будет находиться в службе ведения журнала Stackdriver облачной платформы Google Cloud вместо консоли браузера.

От Примечания к выпуску скрипта Google Apps 2017

23 июня 2017 г.

ведение журнала Stackdriver был удален из раннего доступа. Все сценарии теперь имеют доступ к журналу Stackdriver.

От Ведение журнала> Ведение журнала Stackdriver

В следующем примере показано, как использовать службу console для регистрации информации в 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.
}
5
Rubén

Хотя Logger.log() является технически правильным способом вывода чего-либо на консоль, у него есть несколько неприятностей:

  1. Вывод может быть неструктурированным беспорядком и трудно переварить.
  2. Вы должны сначала запустить скрипт, затем нажать View/Logs, что составляет два дополнительных щелчка (один, если вы помните комбинацию клавиш Ctrl + Enter).
  3. Вы должны вставить Logger.log(playerArray), а затем после отладки вы, вероятно, захотите удалить Logger.log(playerArray), следовательно, еще 1-2 дополнительных шага.
  4. Вы должны нажать OK, чтобы закрыть наложение (еще один дополнительный щелчок).

Вместо этого, когда я хочу что-то отладить, я добавляю точки останова (нажимаю на номер строки) и нажимаю кнопку "Отладка" (значок ошибки). Точки останова работают хорошо, когда вы назначаете что-то переменной, но не так хорошо, когда вы инициируете переменную и хотите заглянуть внутрь нее на более позднем этапе, что похоже на то, что пытается сделать операционная система. В этом случае я бы принудительно установил условие прерывания, введя "x" (x обозначает точку!), Чтобы выдать ошибку времени выполнения:

enter image description here

Сравнить с просмотром логов:

enter image description here

Консоль отладки содержит больше информации и намного проще для чтения, чем наложение журналов. Одно незначительное преимущество этого метода заключается в том, что вам никогда не придется беспокоиться о загрязнении вашего кода кучей команд журналирования, если вы поддерживаете чистый код. Даже если вы введете "x", вы будете вынуждены не забывать удалить его как часть процесса отладки, иначе ваш код не будет работать (встроенная мера очистки, ура).

5
thdoan