2015-09-26 84 views
0

我有一個附件,可以將「模板」文檔文件中的內容複製到當前打開的文檔中。Google Apps腳本 - appendParagraph和圖片

當在源文檔的主體中使用內嵌圖像時,將複製文本,但UI會顯示「重新連接」消息。加載時會顯示灰色的圖像佔位符區域。關閉文檔並重新打開Goog​​le Drive後會顯示錯誤。

奇怪的是,如果我將圖像放在源文檔頭中,所有內容都會正確添加。

var targetBody = targetDoc.getBody(); 

    for(var j = 0; j < totalElementsBody; ++j) { 
    var element = templateBody.getChild(j).copy(); 
    var type = element.getType(); 
    if (type == DocumentApp.ElementType.PARAGRAPH) { 
     targetBody.appendParagraph(element); 
    } 
    else if(type == DocumentApp.ElementType.TABLE){ 
     targetBody.appendTable(element); 
    } 
    else if(type == DocumentApp.ElementType.LIST_ITEM){ 
     targetBody.appendListItem(element); 
    } 
    else if(type == DocumentApp.ElementType.INLINE_IMAGE) { 
     var image = element.asInlineImage().getBlob(); 
     targetBody.appendImage(image); 
    } 
    else if(type == DocumentApp.ElementType.HORIZONTAL_RULE) { 
     targetBody.appendHorizontalRule(); 
    } 
    else if(type == DocumentApp.ElementType.PAGE_BREAK) { 
     targetBody.appendPageBreak(); 
    } 

}

我已經試過這Unable to get DocumentBodySection.appendImage(InlineImage) to function properly?但與內嵌圖像款一直沒有孩子,所以永遠不會執行的if語句。

我還注意到,複製/附加並不總是使用源文檔元素的字體系列......有時它會,有時不會。

回答

0

我相信這應該採取適當添加圖像內嵌的護理:

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(); 
     doc.appendImage(blob); 
     } 
     else doc.appendParagraph(element.asParagraph()); 
    } 

因此,當它沒有小孩,else聲明應照顧它。

對於複製/附加,您可以編寫一個onEdit()函數,該函數將使用setAttributes方法處理所有格式。下面是一個例子:

function onEdit() 
{ 
    var doc = DocumentApp.getActiveDocument(); 

    var style = {}; 
    style[DocumentApp.Attribute.FONT_FAMILY] = 'Calibri'; 
    style[DocumentApp.Attribute.FONT_SIZE] = 18; 

    doc.getBody().setAttributes(style); 
} 

希望這會有所幫助。