скрипт google получит текущий ответ onSubmit

есть ли способ узнать текущий ответ формы google (программно)? В функции onSubmit.

посмотрел документация но я должен предоставить respondId. Как я нашел respondId?

обрезанный код от них об этом:

// Open a form by ID and log the responses to each question.
 var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
 var formResponses = form.getResponses();
 for (var i = 0; i < formResponses.length; i++) {
   var formResponse = formResponses[i];
   var itemResponses = formResponse.getItemResponses();
   for (var j = 0; j < itemResponses.length; j++) {
     var itemResponse = itemResponses[j];
     Logger.log('Response #%s to the question "%s" was "%s"',
         (i + 1).toString(),
         itemResponse.getItem().getTitle(),
         itemResponse.getResponse());
   }
 }

обновление:

function onSubmit(e) {
  /* Get values entered by filling the form */
  var itemResponses = e.response.getItemResponses();
  var myWantedValue = itemResponses[COLUMN_NUMBER].getResponse();
}

Примечание: передавая параметр e (vent) в качестве параметра, можно получить доступ к значениям, отправив живую форму, а не редактор сценариев!

4 ответов


этот код дает вам значения для последнего ответа формы, это то, что вы ищете ?

function myFunction() {
  var formResponses = FormApp.getActiveForm().getResponses();
  Logger.log(formResponses.length);
  var formResponse = formResponses[formResponses.length-1];
  var itemResponses = formResponse.getItemResponses();
  for (var j = 0; j < itemResponses.length; j++) {
    var itemResponse = itemResponses[j];
    Logger.log('Last response to the question "%s" was "%s"',
               itemResponse.getItem().getTitle(),
               itemResponse.getResponse());
  }
}

@Serge я использовал ваш код для отображения ответов респондента, когда он отправляет форму с помощью формы.setConfirmationMessage() и форма.getConfirmationMessage (). я использовал форму onSubmit trigger. Однако он неизменно возвращает ответы предыдущего респондента. я попытался использовать e.ответ тоже, но снова я получаю ответы предыдущего респондента. Я также сделал Лесоруб.журнал(форма.getConfirmationMessage ()), чтобы проверить и найти, что это отображает ответы текущего опрашиваемый. Однако фактическая страница, которую респондент получает при отправке, является страницей предыдущего респондента. Есть зацепки?

Update: я отметил, что другие люди также опубликовали эту проблему: см. Это https://productforums.google.com/forum#!тема/документы / cygTFXtyy5I и этот http://code.google.com/p/google-apps-script-issues/issues/detail?can=2&start=0&num=100&q=&colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component%20Owner&groupby=&sort=&id=3507


кажется, мы не можем настроить сообщение для каждого пользователя. Я нашел это: https://code.google.com/p/google-apps-script-issues/issues/detail?can=2&start=0&num=100&q=&colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component%20Owner&groupby=&sort=&id=3507#makechanges


вы пытаетесь прочитать точный ответ, который вызвал выполнение onSubmit (), чтобы запустить другой процесс на определенных данных, таких как отправка подтверждения по электронной почте.

Если вышеизложенное верно:

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

разница в том, что на листе вы можете создать столбец "reply_sent", чтобы отметить момент постобработки каждого ответа формы, например, отправив автоматический ответ на основе его содержимого.

затем, когда onSubmit () запускается, он проходит через все ответы и обрабатывает не только последний полученный, или тот, который вызвал функцию onSubmit (), но и любой другой ответ, который может иметь по какой-либо причине оставлен без ответа (поле"reply_sent" пустое). Последнее преимущество этого подхода заключается в том, что ваш скрипт регистрирует свое поведение, поскольку дата записывается вместе с каждым ответом, когда он запускает obSubmit().