2012-06-26 58 views
2

我有一个Google Apps脚本,它通过调用body.replaceText('TextA','TextB');来替换模板文档的副本中的占位符。将图片插入指定位置

现在我想扩展它以包含图像。有谁知道如何做到这一点?

谢谢 安德烈

编辑:只是为了说清楚我的脚本做什么。我在电子表格中创建了一个Google表单。我创建了一个脚本,它在表单提交时运行,遍历与表单相对应的表单,查找未处理的行,从相应的单元格获取值并将它们放入Google文档的副本中。 Google表单中的某些字段是多行文本字段,这是'\ r \ r'的来源。

这里有一个解决办法,我到现在为止,没有优雅的拿出,但到目前为止的工作原理:

// 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

您的脚本如何使用此替换功能添加'\ r \ r'?我猜想到了什么? –

回答

4

下面是一段代码,你想要做什么(大约)。

(可能有其他的方法来做到这一点,它肯定需要一些改进,但总的想法是有)

我选择了使用“###”中的文档,以纪念地方形象图片必须在你的谷歌驱动器中(或者更准确地说在'some'谷歌驱动器中) 下面的代码使用我共享的文件和我共享的图片,所以你可以试试 这里是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文档创建一个新的段落。

+0

谢谢,Serge!这就是我需要的。 现在我试图将“Test \ r \ r ### \ r \ rTest”这样的文本分割为段落,以使您的代码在我的项目中正常工作。 –

+0

不要犹豫,看看记录器,看看你的文档是如何构建的;-) –

+1

“测试\ r \ r ### \ r \ rTest” - 这是如何构建段落,因此el [j] == '###'不起作用。我一直在调查这... –