How to copy ListItems from one Google Document to another while preserving numbering?

匆匆过客 提交于 2021-02-07 10:31:11

问题


The accepted answer to How to copy content and formatting between Google Docs? indicates that we have to add conditional code just to copy elements. But I cannot get it to work for ListItem types, because the target document shows the list items without the original numbering.

var source_doc = DocumentApp.getActiveDocument();
var selection = source_doc.getSelection();
if (!selection) {
    var ui = DocumentApp.getUi();
    ui.alert('Please make a selection first.');
    return;
}

var target_doc = DocumentApp.create('CopyOf'+DocumentApp.getActiveDocument().getName());
var target_body = target_doc.getBody();

var elements = selection.getRangeElements();
for (var i = 1; i < elements.length; i++) {
    var source_element = elements[i].getElement();
    var copy_element = source_element.copy();
    if (copy_element.getType() == DocumentApp.ElementType.PARAGRAPH) {
        target_body.appendParagraph(copy_element);
    } else if (copy_element.getType() == DocumentApp.ElementType.LIST_ITEM) {
        // This does not keep the numbering on the list item. Why?
        target_body.appendListItem(copy_element);

        // And playing games with setListId doesn't work either:
        // copy_element.setListId(source_element);
        // target_body.appendListItem(copy_element);
    }
    // TODO: Handle the other elements here.
}

The source document displays like this:

Target document renders like this:

How do I preserve ListItem formatting?

This seems much much harder than it should be: What I really want is to copy the users selection verbatim into a new document preserving all formatting, and from a google script.

It would seem that this could be done at a higher level. I can manually copy and paste and preserve the formatting, just not from the script.


回答1:


I'm guessing that the cause of this is that there's a problem with using a Selection. Reading from a document directly seems to work fine.

Try appending the ListItem as text as a workaround.

target_body.appendListItem(copy_element.getText());

This will only copy the text though, not the formatting. You can also try to implement it by making a new list instead of copying the element directly. Here's a sample SO that might help.




回答2:


I was having a similar problem (but not using a selection). It was being copied as a list but without any actual bullets. I just re-set the bullets manually like this:

target_body.appendListItem(copy_element).setGlyphType(DocumentApp.GlyphType.NUMBER)


来源:https://stackoverflow.com/questions/36122730/how-to-copy-listitems-from-one-google-document-to-another-while-preserving-numbe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!