получить значение для конкретного вопроса / элемента в форме Google, используя Google App Script в событии отправки. - PullRequest
0 голосов
/ 11 мая 2019

Я выяснил, как запустить проект / функцию Google App Script в форме отправки, используя информацию на https://developers.google.com/apps-script/guides/triggers/events#form-submit_4.

Как только у меня будет e, я могу позвонить e.response, чтобы получить FormResponse объект и затем вызовите getItemResponses(), чтобы получить массив всех ответов.

Без перебора массива и проверки каждого из них, есть ли способ найти ItemResponse для конкретного вопроса?

Я вижу getResponseForItem (item) , но выглядиткак я должен каким-то образом сначала создать Item ?

Могу ли я кое-как использовать e.source, чтобы получить объект Form , а затем найти Item по вопросу, не перебирая все из них, чтобы я мог получить Itemобъект, который я могу использовать с getResponseForItem(item)?

1 Ответ

1 голос
/ 16 мая 2019

Это код, который я использую для перетаскивания текущего набора ответов в объект, поэтому наиболее актуальным ответом на вопрос «Ваше имя» становится form.yourName, который, как я обнаружил, является самым простым способом поиска ответов на вопрос:

function objectifyForm() {
  //Makes the form info into an object
  var myform = FormApp.getActiveForm();
  var formResponses = myform.getResponses()
  var currentResponse = formResponses[formResponses.length-1];
  var responseArray = currentResponse.getItemResponses()
  var form = {};
  form.user = currentResponse.getRespondentEmail(); //requires collect email addresses to be turned on or is undefined.
  form.timestamp = currentResponse.getTimestamp();
  form.formName = myform.getTitle();
  for (var i = 0; i < responseArray.length; i++){
    var response = responseArray[i].getResponse();
    var item = responseArray[i].getItem().getTitle();
    var item = camelize(item);
    form[item] = response;
  }
  return form;
}

function camelize(str) {
  str = str.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+]/g, '')
  return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
    if (+match === 0) return ""; // or if (/\s+/.test(match)) for white spaces
    return index == 0 ? match.toLowerCase() : match.toUpperCase();
  });
}


//Use with installable trigger
function onSubmittedForm() {
  var form = objectifyForm();
  Logger.log(form);
  //Put Code here

}

Пара важных вещей.

  • Если вы измените вопрос в форме, вам потребуется обновить код
  • Не обязательные вопросы могут или могут бытьне иметь ответов, поэтому проверьте, существует ли ответ, прежде чем использовать его
  • Я использую только устанавливаемые триггеры, поэтому я знаю, что он работает с ними.Не уверен насчет простых триггеров
  • Вы можете увидеть объект формы, открыв логи, что полезно для поиска имен объектов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...