邮件合并到Google文档会创建重复项

时间:2019-05-29 18:50:22

标签: arrays google-apps-script

我有一个脚本,该脚本通过将标头映射到模板文档中列出的标签(即<< \ tag name >>)将电子表格数据合并到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和id写回到工作表中

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

当我手动运行脚本时,数据合并没有任何问题,并创建了一个文档,但是当我将其附加到触发器(在表单提交时)时,它会创建重复的文档,我不知道为什么。我们非常感谢您提供的任何帮助,当然,也欢迎任何可以改善代码及其性能的建议!

0 个答案:

没有答案