Возвращается скрипт приложения формы. Невозможно прочитать свойство 'value' с неопределенной ошибкой. - PullRequest
1 голос
/ 18 февраля 2020

У меня есть простой скрипт для создания do c и PDF при отправке формы. Я проверил весь свой код и отправил тестовую форму, чтобы проверить его, но я продолжал получать ошибку неопределенности 'values', когда скрипт пытается прочитать из таблицы результаты из формы.

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

Может кто-нибудь указать, что я сделал не так?

Я установил триггер для выполнения скрипта при отправке формы: Trigger set

Вот мой код:

function myFunction(e) {
  //e.values is an array of form values
  var timestamp = e.values[0];
  var firstName = e.values[1];
  var lastName = e.values[2];
  var title = e.values[3];
  Logger.log(e.values[0]);

  //file is the template file, and you get it by ID
  var file = DriveApp.getFileById('google-doc-template-file-id'); 

  //We can make a copy of the template, name it, and optionally tell it what folder to live in
  //file.makeCopy will return a Google Drive file object
  var folder = DriveApp.getFolderById('my-drive-folder-id')
  var copy = file.makeCopy(lastName + ',' + firstName, folder); 

  //Once we've got the new file created, we need to open it as a document by using its ID
  var doc = DocumentApp.openById(copy.getId());

  //Since everything we need to change is in the body, we need to get that
  var body = doc.getBody(); 

  //Then we call all of our replaceText methods
  body.replaceText('{{First name}}', firstName); 
  body.replaceText('{{Last name}}', lastName);  
  body.replaceText('{{Company}}', company); 

  doc.getAs(pdf);
  //Lastly we save and close the document to persist our changes
  doc.saveAndClose(); 
}

Ошибка в строке 3 - var timestamp = e.values[0];.

Ответы [ 2 ]

3 голосов
/ 18 февраля 2020
  • В вашей ситуации используется связанный с контейнером скрипт Google Form.
  • Триггер события OnSubmit установлен с функцией myFunction.
  • . получить 3 значения ответа firstName, lastName, title из 4 вопросов.
  • Вы также хотите получить timestamp.

Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом, как об одном из нескольких возможных ответов.

Точки модификации:

  • Из предоставленного вами изображения обнаруживается, что скрипт является сценарием с привязкой к контейнеру Форма Google .
    • К сожалению, объект события триггера события OnSubmit не имеет свойства values для сценария с привязкой к контейнеру Google Form . Ref
    • В этом случае требуется извлечь значения ответа с помощью e.response.getItemResponses().
  • В случае, если values включенный в объект события, он должен быть связанным с контейнером сценарием электронной таблицы. Когда используется связанный с контейнером скрипт Spreadsheet, вы можете получить значения ответа, используя e.values из myFunction(e). Ref
  • А также, чтобы извлечь метку времени, используется getTimestamp().

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

Модифицированный скрипт:

С:
//e.values is an array of form values
var timestamp = e.values[0];
var firstName = e.values[1];
var lastName = e.values[2];
var title = e.values[3];
Logger.log(e.values[0]);
Кому:
var response = e.response;
var timestamp = response.getTimestamp();
var [firstName, lastName, title] = response.getItemResponses().map(function(f) {return f.getResponse()});

Ссылки:

1 голос
/ 18 февраля 2020

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

  • Сценарий должен быть привязан к электронной таблице, принимающей ответы формы, а не к самой форме.
  • Вам необходимо изменить «Источник события» на триггере на «Из таблицы» вместо «Из формы»
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...