2

我已经成功编写了一个小脚本,该脚本根据 Google 电子表格中的数据创建了一个连续信件(给多个收件人的物理信件),为每个信件/地址创建一个新文档。它可以工作,但是对于大型邮件,这种方法有点麻烦,因为要创建大量文档并且需要单独打印。

现在我想做同样的事情,但结果是将所有字母都放在一个 Google 文档中。

有没有办法复制现有文档的内容并将其多次插入相同或任何其他文档(即通过应用程序脚本复制/粘贴)?

4

1 回答 1

7

根据您的评论,这是我用来将未确定数量的文档合并到一个新文档中的完整代码。所有文档 ID 都在一个 ID 数组中,作为主函数的参数,结果是一个新文档,名称后附加了“多页”。如果您需要比代码注释提供的更多解释,请告诉我...(请注意,它仅适用于包含文本和表格的文档,如果您有图像或其他数据类型,则必须在我们按照相同的逻辑检查 ElementType 的主循环)


编辑:在您的更新之后删除了第一个代码我尝试了这种方法,假设您的主文档中只有段落......试一试,我想您可以从那里开始开发您的项目。

function Serialletter_Singledocument() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Datenbank");
  var LastColumn = sheet.getLastColumn();

  //here you need to get document id from url (Example, 1oWyVMa-8fzQ4leCrn2kIk70GT5O9pqsXsT88ZjYE_z8)
  var FileTemplateFileId = "1Wrf2qvUTyc5tMmJIly40Z4U4sJb4-QhT5z-UfJmtQ-M" //Browser.inputBox("ID der Serienbriefvorlage (aus Dokumentenlink kopieren):");
  var doc = DocumentApp.openById(FileTemplateFileId);
  var DocName = doc.getName();

  var headpara=' ***** ';

  // Fetch entire table containing data
  var data = sheet.getDataRange().getValues();

  //Create copy of the template document and open it
  var SerialLetterID = DocsList.getFileById(FileTemplateFileId).makeCopy(DocName +" Serienbrief").getId();
  var docCopy = DocumentApp.openById(SerialLetterID);
  var totalParagraphs = docCopy.getBody().getParagraphs() ;// get the total number of paragraphs elements
  Logger.log(totalParagraphs);
  var elements = [];
  for ( var i = 1; i < data.length; i++) { //do for every record in the spreadsheet (containing the content to replace the variables in the letter)
    for (var e=0;e<totalParagraphs.length;e++){

      var element = totalParagraphs[e].copy();
//      Logger.log(element.editAsText().getText())
      for(var c=0;c<data[0].length;c++){     
        element.replaceText("<" +data[0][c] +">", data[i][c]); //replace variable (from column title) with actual value
      }
      elements.push(element);// store paragraphs in an array
    }

    for(var el=0;el<elements.length;el++){ 
      var paragraph = elements[el].copy();
      docCopy.getBody().appendParagraph(paragraph);
    }
  docCopy.getBody().appendPageBreak()
  }
  docCopy.saveAndClose();

  Browser.msgBox("Serienbrief ist erstellt. Sie finden die erstellten Dokumente in Google Drive unter Meine Ablage");
}
于 2013-11-11T13:46:18.483 回答