2016-11-22 29 views
0

我在尝试将作为模板的活动文档的页眉/页脚复制到新创建的文档中。我能够很容易地获得文本,但我无法获得格式,字体或水平对齐。复制Google文档标题使用GAS格式化

我的理论是,我可以做类似

newDocHeader.setAttributes(activeDocHeader.getAttributes()); 

但是,我仍然只能看到所左对齐纯文本。当检查表头的attributes对象我得到如下:

({ 
    FONT_SIZE:null, 
    ITALIC:null, 
    STRIKETHROUGH:null, 
    FOREGROUND_COLOR:null, 
    BOLD:null, 
    LINK_URL:null, 
    UNDERLINE:null, 
    FONT_FAMILY:null, 
    BACKGROUND_COLOR:null 
}) 

我通过标题的子对象试图循环和每个孩子执行类似setAttributes(getAttributes),但无济于事。

我还以为页眉/页脚对象的copy()功能将是有前途的,但是当我试图

newDocFooter = activeDocFooter.copy(); 

但是,这会产生没有文字或格式空白页脚。

有没有一种很好的方法将格式,字体和水平对齐从一个页眉/页脚复制到另一个页面?

回答

0

我与DocumentApp完全陌生,但这个广泛为我工作:广泛只有

/** 
* Copies headers from one document to another. 
* @param {string} source The source document URL. 
* @param {string} target The target document URL. 
*/ 
function copyHeader(source, target) {  
    // Used to map from child types to required "append<X>" method 
    var functionMap = { 
    PARAGRAPH: 'appendParagraph', 
    LIST_ITEM: 'appendListItem', 
    HORIZONTAL_RULE: 'appendHorizontalRule', 
    IMAGE: 'appendImage', 
    TABLE: 'appendTable' 
    }; 

    var t = DocumentApp.openByUrl(target); 
    var s = DocumentApp.openByUrl(source); 

    var sourceHeader = s.getHeader(); 
    var targetHeader = t.getHeader(); 

    // If there is no header in the target doc, add one 
    if (!targetHeader) { 
    targetHeader = t.addHeader(); 
    } 
    targetHeader.clear(); 

    // Docs requires one child element, so one will remain even 
    // after clearing. Get a reference to it so it can be removed 
    var targetNumChild = targetHeader.getNumChildren(); 
    if (targetNumChild === 1) { 
    var placeholderElement = targetHeader.getChild(0); 
    } 

    // Copy across each element to the target doc 
    var c = sourceHeader.getNumChildren(); 
    for (var i = 0; i < c; i++) { 
    var element = sourceHeader.getChild(i).copy(); 
    var method = functionMap[element.getType()]; 
    targetHeader[method](element); 
    } 

    // Remove the saved element if required 
    if (targetHeader.getNumChildren() > 1 && placeholderElement) { 
    targetHeader.removeChild(placeholderElement); 
    } 
} 

我说,因为格式,如粗体,水平居中,水平规则等全部复制跨罚款,但奇怪的是,名单似乎从编号变成了名词,因此翻译中丢失了一些东西。

它可能需要一点调整,当然有一个更简单的方法,但是如果没有其他任何东西,这可能是一个开始。

源文件:

enter image description here

目标文件,注意,列表类型是不完全正确!:

enter image description here

希望它能帮助。