gpt4 book ai didi

google-apps-script - 将文本、图像、表格、所有格式、边距从 GDoc 复制到另一个

转载 作者:行者123 更新时间:2023-12-03 22:23:54 24 4
gpt4 key购买 nike

在尝试了几个邮件合并脚本之后,我决定自己编写。我的合并脚本作为一个单独的文件运行,它从 GDoc 读取模板,从 GSpreadsheet 读取数据,并将其合并到 Gmails 或新的 GDoc - 每个 SS 行一页/电子邮件。

问题是它不会将文本格式、边距或图像复制到 Gmail 或新的 GDoc 中……只有纯文本。

我正在使用 DocumentApp.openById > getActiveSection > getText() 来捕获文本。

这是 GDoc 中的代码 http://goo.gl/fO5vP我似乎无法共享脚本,所以我不得不将它放在文档中。将它复制到一个新的脚本中,它将被颜色编码。

最佳答案

您应该首先使用 DocsList 复制模板,以便从“完整”的初始文档开始。

  var template = DocsList.getFileById(docIDs[0]);// get the template model, in this sample I had an array of possible templates, I took the first one
var newmodelName=template.substr(0,11)+'multipage'+template.substring(18);// define a new name, do what you need here...
var baseDocId = DocsList.copy(template,newmodelName).getId();// make a copy of firstelement and give it new basedocname build from the serie(to keep margins etc...)
var baseDoc = DocumentApp.openById(baseDocId);// this is the new doc to modify

然后使用 document class有一个直接的 replaceText method


编辑:关于你的次要问题,这里有一个关于你如何做的建议。除了 inlineImage 之外它工作得很好,我会继续关注它。您还可以通过添加其他元素类型使脚本更加通用...

function myFunction() {
var template = DocsList.getFileById(key);// get the template model
var newmodelName='testcopy';// define a new name, do what you need here...
var baseDocId = DocsList.copy(template,newmodelName).getId();// make a copy of firstelement and give it new basedocname build from the serie(to keep margins etc...)
var baseDoc = DocumentApp.openById(baseDocId);// this is the new doc to modify
var body = baseDoc.getActiveSection();
body.appendPageBreak();
var totalElements = body.getNumChildren();
for( var j = 0; j < totalElements; ++j ) {
var element = body.getChild(j).copy();
var type = element.getType();
if( type == DocumentApp.ElementType.PARAGRAPH )
body.appendParagraph(element);
else if( type == DocumentApp.ElementType.TABLE )
body.appendTable(element);
else if( type == DocumentApp.ElementType.LIST_ITEM )
body.appendListItem(element);
else if( type == DocumentApp.ElementType.INLINE_IMAGE )
{ var blob = body.getChild(j).asInlineImage().getBlob();
body.appendImage(blob); }
}
}

编辑 2 感谢 @Fausto ,这里是一个完整的工作版本。段落中包含内联图像,因此我们必须再挖掘一层才能获得 blob...

function myFunction() {
var template = DocsList.getFileById(key);// get the template model
var newmodelName='testcopy';// define a new name, do what you need here...
var baseDocId = DocsList.copy(template,newmodelName).getId();// make a copy of firstelement and give it new basedocname build from the serie(to keep margins etc...)
var baseDoc = DocumentApp.openById(baseDocId);// this is the new doc to modify
var body = baseDoc.getActiveSection();
body.appendPageBreak();
var totalElements = body.getNumChildren();
for( var j = 0; j < totalElements; ++j ) {
var element = body.getChild(j).copy();
var type = element.getType();
if (type == DocumentApp.ElementType.PARAGRAPH) {
if (element.asParagraph().getNumChildren() != 0 && element.asParagraph().getChild(0).getType() == DocumentApp.ElementType.INLINE_IMAGE) {
var blob = element.asParagraph().getChild(0).asInlineImage().getBlob();
body.appendImage(blob);
}
else body.appendParagraph(element.asParagraph());
}
else if( type == DocumentApp.ElementType.TABLE )
body.appendTable(element);
else if( type == DocumentApp.ElementType.LIST_ITEM )
body.appendListItem(element);
}
}

关于google-apps-script - 将文本、图像、表格、所有格式、边距从 GDoc 复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14252185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com