Как получить значения формы в обработчике событий submit?

Я пытаюсь начать с очень простой формы Google, содержащей всего пару вопросов (множественный выбор с двумя вариантами и коротким текстом). После его создания я открыл редактор скриптов и набрал

function onSubmit(e) {
  Logger.log("onSubmit(%s)", JSON.stringify(e));
}

и настройки onSubmit в качестве обработчика триггера "отправить форму", используя" триггеры текущего проекта "из меню" Редактировать".

заполнение формы и отправка ее теперь приводит к вызову обработчика, но я вижу только это в журнале:

[17-04-15 18:56:23:584 CEST] onSubmit({"response":{},"source":{},"authMode":{},"triggerUid":1870249629})

т. е. поле ответа пустым. Я также пробовал использовать FormApp.getActiveForm().getResponses(), но он также возвращает массив из нескольких пустых объектов (OTOH,FormApp.getActiveForm().getTitle() возвращает название, которое я дал форме).

Я подозреваю, что мне нужно сделать скрипт некоторые дополнительные разрешения на доступ к данным формы, но я понятия не имею, как это сделать, и даже если это действительно проблема.

кто-нибудь знает, почему я не получаю значения форма и что я должен сделать, чтобы получить их? Заранее спасибо!

1 ответов


существует 2 шаблона для получения отправленных значений. Для обоих шаблонов функция извлечения значений из представления формы должна быть установлена в качестве триггера. Подробная информация об устанавливаемых триггерах -https://developers.google.com/apps-script/guides/triggers/installable.

1. Скрипт открывается на электронную таблицу.

в этом случае, установив триггер, вы можете получить отправленные значения своим скриптом. Деталь информация об объектах событий https://developers.google.com/apps-script/guides/triggers/events#form-submit.

сценарий :

function onSubmit(e){
  Logger.log("%s", JSON.stringify(e));
}

результат :

{
  "values": [
    "date and time",
    "test"
  ],
  "namedValues": {
    "fromtestform": [
      "test"
    ],
    "timeStamp": [
      "date and time"
    ]
  },
  "range": {
    "columnStart": 1,
    "rowStart": 2,
    "rowEnd": 2,
    "columnEnd": 2
  },
  "source": {},
  "authMode": {},
  "triggerUid": #####
}

2. Скрипт открывается по форме.

в этом случае представленный значения могут быть получены с помощью следующего скрипта. Детали информация https://developers.google.com/apps-script/reference/forms/form-response.

сценарий :

function onSubmit(e){
  Logger.log("authMode=%s, source.getId()=%s", e.authMode, e.source.getId());
  var items = e.response.getItemResponses();
  for (i in items){
    Logger.log("getItem().getTitle()=%s, getResponse()=%s", items[i].getItem().getTitle(), items[i].getResponse());
  }
}

результат :

authMode=FULL, source.getId()=### form ID ###
getItem().getTitle()=## item's title ##, getResponse()=test

если я неправильно понял ваш вопрос, Извините.