Объединение почты в Google Docs создает дубликаты - PullRequest
0 голосов
/ 29 мая 2019

У меня есть скрипт, который объединяет данные электронной таблицы в документ Google, сопоставляя заголовки с тегами, которые я перечислил в шаблонном документе (т.е. << \ имя тега >>). Данные заполняются через форму Google и при отправке создают копию и объединяют данные.

У меня есть другой скрипт, который я использовал, где я сопоставляю каждый тег по отдельности, но это отнимает много времени и надеется получить что-то более динамичное (без использования надстройки, если это возможно).

function documentMerge() {
  var templateId = "<id>";
  var folderId = "<id>";
  var dataSheet = SpreadsheetApp.openById("<id>").getSheetByName("Form Responses 1");
  var dataRange = dataSheet.getRange(1, 1, dataSheet.getLastRow(), dataSheet.getLastColumn()).getValues();
  var headers = dataRange[0];
  var docCol = headers.indexOf('Document Link');
  var docIdCol = headers.indexOf('Document ID');
  var firstNameCol = headers.indexOf('First Name');
  var lastNameCol = headers.indexOf('Last Name');
  var locCol = headers.indexOf('Location');

   for (var i = 0; i < dataRange.length; i++) { 
     var currentData = dataRange[i]; 

Хотите создать документ, только если он еще не существует

       if(currentData[docCol] === "") {
         // Generate copy
         var name = currentData[lastNameCol]+", "+currentData[firstNameCol]+" ("+currentData[locCol]+") - NVCHS Promotion Request";
         var template = DriveApp.getFileById(templateId)
                         .makeCopy(name, DriveApp.getFolderById(folderId))
                         .getId();
         var newDoc = DocumentApp.openById(template);
         var newBody = newDoc.getBody();

          for (var x = 0; x < currentData.length; x++) {
           var tag = "<<"+ dataRange[0][x] +">>";

            while (newBody.findText(tag) !== null) {

               newBody.replaceText(tag, currentData[x]);
            }
          }
           newDoc.saveAndClose();

Я хочу записать URL и идентификатор обратно на лист

          var link = newDoc.getUrl();
          dataSheet.getRange(i+1,docCol+1).setValue(link); 
          dataSheet.getRange(i+1,docIdCol+1).setValue(template);
        }   
   }
}

Когда я запускаю сценарий вручную, данные объединяются без проблем и создают один документ, но когда я присоединяю его к триггеру (при отправке формы), он создает дубликаты документов, и я не могу понять, почему. Любая помощь приветствуется и, конечно, приветствуются любые предложения, которые могут улучшить код и его производительность!

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