Повторяющиеся пустые файлы появляются при конвертации из формы Google в документ - PullRequest
0 голосов
/ 08 марта 2019

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

Шаг 1 Пользователь заполняет форму Google

Шаг 2 Форма Google для передачи данных в сценарий

Шаг 3 Форма Google также отправляет данные вGoogle Sheet

Step.4 Скрипт будет использовать данные формы для создания документа и копию документа из шаблона doc

Step.5 Значение столбца в Google Sheet можно связать с документом

Прочитав много статей в Интернете, я думаю, что это очень хорошо, я попробовал следующий код, он «иногда удался»:

function myFunction(e) {
  const folderID = '##';
  const templateFile = '##';
  const sheetPath = '##';
  const nameCol = 4;

  const arr = ['timestamp', 'email', 'Company Name', 'Contact Man'];

  const ss = SpreadsheetApp.openById(sheetPath);
  const sheet = ss.getSheets()[0]; 
  Logger.log('nesl_timestamp:' + e.namedValues);
  const timestamp = e.namedValues['timestamp']; //0
  const email = e.namedValues['email']; //1
  const ein = e.namedValues['EIN / Uniform Number']; //2
  const name = e.namedValues['Company Name']; //3
  const man = e.namedValues['Contact Man']; //4
  const tel = e.namedValues['TEL']; //5
  const add = e.namedValues['adress']; //6
  const title = e.namedValues['Title']; //7
  const job = e.namedValues['Job content']; //8
  const time = e.namedValues['Working hours']; //9
  const type = e.namedValues['Salary or Wage ']; //10
  const salary = e.namedValues['Salary']; //11
  const dep1 = e.namedValues['Department [1]']; //12
  const dep2 = e.namedValues['Department [2]']; //13

  const other = e.namedValues['Other Inf.']; //15
  const method = e.namedValues['Application Method']; //16
  const data = e.namedValues['Prepare data']; //17
  var userfile = e.namedValues['userfile']; //18
  const exp = e.namedValues['exp']; //19
  const people = e.namedValues['people ']; //20
  const addno = e.namedValues['addno']; //21
  const otherThing = e.namedValues['otherThing ']; //22

  var arr2 = [timestamp, email, name, man];

  //todo:set userfile path
  if (userfile.length != 0 && userfile.indexOf(',') > -1) userfile = userfile.split(',')[0];
  Logger.log('nesl_userfile:' + userfile);

  //todo: copy template.doc to doc
  const copy = DriveApp.getFileById(templateFile).makeCopy(name + ',' + timestamp, DriveApp.getFolderById(folderID));
  const docID = copy.getId();
  Logger.log('nesl_docID:' + docID);

  const doc = DocumentApp.openById(docID);
  var body = doc.getBody();

  body.replaceText('{{timestamp}}', timestamp);
  body.replaceText('{{ein}}', ein);
  body.replaceText('{{name}}', name);
  body.replaceText('{{man}}', man);
  body.replaceText('{{tel}}', tel);
  body.replaceText('{{add}}', add);
  body.replaceText('{{title}}', title);
  body.replaceText('{{job}}', job);
  body.replaceText('{{time}}', time);
  body.replaceText('{{type}}', type);
  body.replaceText('{{salary}}', salary);
  body.replaceText('{{dep1}}', dep1);
  body.replaceText('{{dep2}}', dep2);
  body.replaceText('{{other}}', other);
  body.replaceText('{{method}}', method);
  body.replaceText('{{data}}', data);
  body.replaceText('{{exp}}', exp);
  body.replaceText('{{people}}', people);
  body.replaceText('{{addno}}', addno);
  body.replaceText('{{otherThing}}', otherThing);
  body.replaceText('{{userfile}}', userfile);

  doc.saveAndClose();

  //todo: get doc id insert into sheet
  //I think this may have to be written after openById(), otherwise he will copy the file twice, but I find that it will copy the file twice when I first add the data. I am not sure about myself now.
  sheet.getRange(sheet.getLastRow(), sheet.getLastColumn()).setValue(docID);
  Logger.log('nesl_update:' + sheet.getLastRow() + ',' + sheet.getLastColumn());

  //todo: set name column link
  //I think this may have to be written after openById(), otherwise he will copy the file twice, but I find that it will copy the file twice when I first add the data. I am not sure about myself now.
  var nameColumnSheet = sheet.getRange(sheet.getLastRow(), nameCol);
  sheet.getRange(sheet.getLastRow(), nameCol).setValue(
    '=HYPERLINK("https://docs.google.com/document/d/' + docID + '","' + nameColumnSheet.getValue() + '");'
  );

  //todo:Send the link to the user in the email
  var html =
    '<body>' +
    '<h2> thank: ' + man + ' </h2><br/>' +
    '<p> link:' + 'https://docs.google.com/document/d/' + docID + '<br/> and http://dce.ntub.edu.tw/p/404-1029-67423.php?Lang=zh-tw </p>' +
    '</body>';

  MailApp.sendEmail(
    email,
    'nnboss@ntub.edu.tw',
    'ntub',
    { htmlBody: html }
  );
}

В нем часто встречаются следующие ошибки:

  • Добавлять одни и те же данные на лист много раз.
  • Копировать несколько шаблонов документов, документ {{item}} заменяется на «пустой», становится пустым документ
  • Но пустой документ сохранит отметку времени
  • Ссылка на листе будет связана с пустым документом
  • Однако ссылка в электронном письме связана с правильным документом и не отправляетсянесколько раз.
  • связанные исчезают
  • другие ошибки

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

По моим наблюдениям, это выглядит так, как будто myFunction () вызывается несколько раз, и во второй раз нет 'e', ​​но должно появиться 'ReferenceError:' e 'неопределено ', и у него нет причин для этого.

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

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

шаблон документа

правильный документ

пустой документ

Есликто-нибудь должен попробовать:

папка: https://drive.google.com/open?id=1lv7euKTQcS5Ooa7UUErRc3eBJNZz01jx

форма: https://docs.google.com/forms/d/16yzqi0ClVUBokXmehDAzY0otY7TdN8WTiBY2zHNXD7g

лист: https://docs.google.com/spreadsheets/d/1oAvIpx02f2eSqZl7jHpNsh2AAw31H8RGNw50W38lmDk

шаблон документа: https://docs.google.com/document/d/11QGRwplzVNtjcYa_n64HbQ6OwCiJxsBkWergxAvd0Ho

код скрипта: https://docs.google.com/document/d/1sKFzgz6PKzuIXL3qP2E1CntFRvooxI0tY6K4D1Ksj6c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...