заменить слова в Google do c словами из листов Google - Невозможно прочесть свойство '0' из undefined - PullRequest
0 голосов
/ 27 мая 2020

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

Пожалуйста, помогите мне

  var title = e.values[0];
  var surname = e.values[1]; 
  var fullNames = e.values[2];
  var ID = e.values[3];
  var taxNumber = e.values[4];

  var file = DriveApp.getFileById("1tX6l8ZAHs9Lv9Np1fdOZXPbsFqMcx8ggPv5So8WZ-cM");

  var folder = DriveApp.getFolderById("17F678vzKcE7AaVqef0k-f96uHCOJeotv");

  var copy = file.makeCopy(surname + ',' + fullNames, folder);

  var doc = DocumentApp.openById(copy.getId());

  var body = doc.getBody();

  body.replaceText("{{FullNames}}", fullNames);
  body.replaceText("{{Surname}}", surname);
  body.replaceText("{{ID}}", ID);
  body.replaceText("{{IncomeTaxNumber}}", taxNumber);

  doc.saveAndClose();

}```

Ответы [ 3 ]

0 голосов
/ 28 мая 2020

Если

var timestamp = e.values[0];

выдает ошибку

TypeError: Cannot read property 'values' of undefined

это означает, что вы пытаетесь запустить скрипт вручную, нажав кнопку «Play».

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

  • В вашем случае e.values - объект события - значения, которые передаются в вашу электронную таблицу в момент отправки формы, они могут быть получены только в момент срабатывания триггера.
  • Если вы запустите свою функцию вручную - в этот самый момент в вашу электронную таблицу не будут передаваться значения событий, поэтому values будет undefined, а ваш скрипт Cannot read property 'values' of undefined

Обходной путь

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

  • Вы можете использовать тернарный условный оператор , который проверяет, существует ли определенная переменная (e.values), а если нет - присваивает значение по умолчанию.

    Пример:

    timestamp = e ? e.values[0] : "5/28/2020 11:32:48";

  • Эта строка означает, что если объект события e существует (когда функция запускается триггером), timestamp будет e.values[0].

  • Если e не существует (потому что вы тестируете функцию вручную), жестко запрограммированное значение 5/28/2020 11:32:48 будет присвоено timestamp.

  • Пожалуйста, примените это ко всем своим e.values, чтобы избежать ошибки Cannot read property 'values' of undefined.

0 голосов
/ 28 мая 2020

Хорошо, я понял, удалив все остальные вкладки в электронной таблице. Спасибо за помощь!

0 голосов
/ 28 мая 2020
function myFormSubmit(e) {
  var title=e.values[0];//This is a timestamp
  var surname=e.values[1]; 
  var fullNames=e.values[2];
  var ID=e.values[3];
  var taxNumber=e.values[4];
  var file=DriveApp.getFileById("1tX6l8ZAHs9Lv9Np1fdOZXPbsFqMcx8ggPv5So8WZ-cM");
  var folder=DriveApp.getFolderById("17F678vzKcE7AaVqef0k-f96uHCOJeotv");
  if(surname && fullNames && ID && taxNumber && folder && file) {
    var copy=file.makeCopy(surname + ',' + fullNames, folder);
    var doc = DocumentApp.openById(copy.getId());
    var body = doc.getBody();
    body.replaceText("{{FullNames}}", fullNames);
    body.replaceText("{{Surname}}", surname);
    body.replaceText("{{ID}}", ID);
    body.replaceText("{{IncomeTaxNumber}}", taxNumber);
    doc.saveAndClose();
  }
}

function createFormSubmitTrigger() {
  if(!isTrigger('myFormSubmit')) {
    ScriptApp.newTrigger('myFormSubmit').forForm('formId').onFormSubmit().create();
  }
}

function isTrigger(funcName){
  var r=false;
  if(funcName){
    var allTriggers=ScriptApp.getProjectTriggers();
    for (let i=0;i<allTriggers.length;i++){
      if(funcName==allTriggers[i].getHandlerFunction()){
        r=true;
        break;
      }
    }
  }
  return r;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...