如何使用Google Apps脚本复制文档的一个或多个现有页面

时间:2013-11-10 20:38:00

标签: google-apps-script google-docs

我已成功编写了一个小脚本,根据Google电子表格中的数据为每个字母/地址创建一个新文档,该脚本会创建一个序列号(给几个收件人的实体信件)。 它有效,但对于大型邮件,这种方法有点麻烦,因为创建了大量文档并需要单独打印。

现在我想做同样的事情,但结果是在一个单独的Google文档中包含所有字母。

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

1 个答案:

答案 0 :(得分:5)

在您发表评论之后,这里是我用来合并未确定数量的文档的完整代码。 所有文档ID都在一个ID数组中作为main函数的参数,结果是一个新的doc,其名称附加了“multi-page”。如果您需要比代码注释中提供的更多解释,请告诉我...(请注意,它仅适用于包含文本和表格的文档,如果您有其他数据类型的图像,则必须处理该情况我们按照相同的逻辑检查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");
}