我有一个Google Apps脚本,通过调用body.replaceText('TextA','TextB');替换模板文档副本中的占位符和一些文本。
现在我想扩展它以包含图像。有人知道怎么做吗?
谢谢你, 安德烈
编辑:只是为了清楚我的脚本做了什么。我在电子表格中创建了一个Google表单。我创建了一个在表单提交时运行的脚本,遍历对应于表单的表单,查找未处理的行,从相应的单元格中获取值并将它们放入Google文档的副本中。 Google表单中的某些字段是多行文本字段,即'\ r \ n'来自的位置。
这是我现在提出的一种解决方法,不是很优雅,但它到目前为止有效:
// replace <IMG src="URL"> with the image fetched from URL
function processIMG_(Doc) {
var totalElements = Doc.getNumChildren();
for( var j = 0; j < totalElements; ++j ) {
var element = Doc.getChild(j);
var type = element.getType();
if (type =='PARAGRAPH'){
var par_text = element.getText();
var start = par_text.search(new RegExp('<IMG'));
var end = par_text.search(new RegExp('>'));
if (start==-1)
continue;
// Retrieve an image from the web.
var url = getURL_(par_text.substring(start,end));
if(url==null)
continue;
// Before image
var substr = par_text.substring(0,start);
var new_par = Doc.insertParagraph(++j, substr);
// Insert image
var resp = UrlFetchApp.fetch(url);
new_par.appendInlineImage(resp.getBlob());
// After image
var substr = par_text.substring(end+1);
Doc.insertParagraph(++j, substr);
element.removeFromParent();
j -= 2; // one - for latter increment; another one - for increment in for-loop
totalElements = Doc.getNumChildren();
}
}
}
答案 0 :(得分:4)
这是一段(大致)你想要的代码。
(可能有其他方法可以做到这一点,肯定需要一些改进,但总的想法就在那里)
我选择在文档中使用'###'来标记插入图片的位置,图片必须位于您的google驱动器中(或者更准确地说是'某些'google驱动器)。 下面的代码使用我共享的文档和我共享的图像,以便您可以尝试。 这里是the link to the doc,不要忘记删除图像并在测试之前在某处放置###(如果有人在你之前运行了代码; - )
function analyze() { // just a name, I used it to analyse docs
var Doc = DocumentApp.openById('1INkRIviwdjMC-PVT9io5LpiiLW8VwwIfgbq2E4xvKEo');
var image = DocsList.getFileById('0B3qSFd3iikE3cF8tSTI4bWxFMGM')
var totalElements = Doc.getNumChildren();
var el=[]
for( var j = 0; j < totalElements; ++j ) {
var element = Doc.getChild(j);
var type = element.getType();
Logger.log(j+" : "+type);// to see doc's content
if (type =='PARAGRAPH'){
el[j]=element.getText()
if(el[j]=='###'){element.removeFromParent();// remove the ###
Doc.insertImage(j, image);// 'image' is the image file as blob
}
}
}
}
编辑:为了让这个脚本工作###字符串必须单独在其段落中,之前或之后没有其他字符...记住每次强制使用ENTER强行换行时文档创建一个新段落。