【问题标题】:How to copy one or more existing pages of a document using google apps script如何使用谷歌应用脚本复制文档的一个或多个现有页面
【发布时间】:2013-11-22 13:52:01
【问题描述】:
我已成功编写了一个小脚本,该脚本根据 Google 电子表格中的数据创建了一个连续信件(给多个收件人的物理信件),为每个信件/地址创建一个新文档。
可以,但是对于大型邮件,这种方法有点麻烦,因为要创建大量文档并且需要单独打印。
现在我也想做同样的事情,但结果是将所有字母都放在一个 Google 文档中。
是否有任何方法可以复制现有文档的内容并将其多次插入到相同或任何其他文档中(即通过应用程序脚本复制/粘贴)?
【问题讨论】:
-
-
非常感谢谢尔盖。然而,我有点失落。也许我对这些元素的工作方式有完全的误解。但是我如何在这里复制整个文本:docs.google.com/document/d/… 添加一个新页面并将其复制到这个新页面中。我不是一个经验丰富的程序员,到目前为止从未编写过 Google 文档(到目前为止只有电子表格)。谢谢。亨氏
标签:
google-apps-script
google-docs
【解决方案1】:
根据您的评论,这是我用来将未确定数量的文档合并到一个新文档中的完整代码。
所有文档 ID 都在一个 ID 数组中,作为主函数的参数,结果是一个新文档,名称后附加了“多页”。如果您需要比代码 cmets 提供的更多解释,请告诉我......(请注意,它仅适用于包含文本和表格的文档,如果您有图像或其他数据类型,则必须在我们按照相同的逻辑检查 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");
}