Сценарий приложения формы не заменяет поля в шаблоне точно - PullRequest
2 голосов
/ 11 марта 2020

У меня есть простой скрипт для создания do c и PDF при отправке формы. Он хорошо работал на простом шаблоне (например, только 1 предложение, имя, фамилия и название компании).

Однако, когда я использую шаблон, который длиннее, имеет много полей и форматирование, код выполняется, но произвольно заменяет текст.

Я пытался жестко закодировать поля форм в порядке возрастания как шаблон do c. Однако он все равно заменяет текст случайным образом

Кто-нибудь может указать, что я сделал неправильно?

Мой код:

function myFunction(e) {
  var response = e.response;
  var timestamp = response.getTimestamp();
  var [companyName, country, totalEmployees,totalPctWomenEmployees,numberNationality,name1,position1,emailAdd1,linkedin1,funFact1,name2,position2,emailAdd2,linkedin2,gameStage,gameStory] = response.getItemResponses().map(function(f) {return f.getResponse()});

  var file = DriveApp.getFileById('XXXXX'); 

  var folder = DriveApp.getFolderById('XXXXX')
  var copy = file.makeCopy(companyName + '_one pager', folder);

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


  var body = doc.getBody(); 


  body.replaceText('{{Company Name}}', companyName);
  body.replaceText('{{Name}}', name1);
  body.replaceText('{{Position}}', position1);
  body.replaceText('{{Email}}', emailAdd1);
  body.replaceText('{{Linkedin}}', linkedin1);
  body.replaceText('{{Fun Fact}}', funFact1);
  body.replaceText('{{Game Stage}}', gameStage);
  body.replaceText('{{Game Story}}', gameStory);


  doc.saveAndClose(); 


  folder.createFile(doc.getAs("application/pdf"));}

Мой шаблон - Template with double curly bracket

Результат - Red boxed are wrongly replaced fields - randomized

Вопрос - Означает ли это, что объявление массива в строке 3 должно соответствовать порядку столбцов ответов формы?

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Наконец, я обнаружил, что пошло не так после стольких проб и ошибок!

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

Проблема с частью -

var [companyName, country, totalEmployees,totalPctWomenEmployees,numberNationality,name1,position1,emailAdd1,linkedin1,funFact1,name2,position2,emailAdd2,linkedin2,gameStage,gameStory] = response.getItemResponses().map(function(f) {return f.getResponse()});

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

Очки обучения: если вы поменялись местами с переменными, то response.getItemResponses().map(function(f) {return f.getResponse()} делает то, что он будет go через ответы формы по столбцам за столбцом по порядку, и он будет отображать содержимое в неправильную переменную. В результате, когда вы позже замените свой текст с помощью body.replaceText('{{Game Stage}}', gameStage), может быть вероятность того, что все, что хранится в gameStage, может быть name1. Следовательно, замененный текст будет неправильным. И вы будете чесать свою голову, пока она не начнет кровоточить, не зная, почему.

Я увидел комментарий @ Tanaike после того, как нашел ответ, но совершенно точно!

0 голосов
/ 11 марта 2020

Вы можете использовать регулярное выражение:

body.replace(/{{Company Name}}/g, companyName); // /g replace globaly all value like  {{Company Name}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...