2016-03-21 12 views
1

How to copy content and formatting between Google Docs?の回答は、要素をコピーするために条件付きコードを追加する必要があることを示しています。しかし、元の番号を付けずにリスト項目を表示するため、ListItem型では機能しません。このような番号付けを維持しながら、あるGoogleドキュメントから別のGoogleドキュメントにListItemをコピーするにはどうすればいいですか?

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. 
} 

ソースドキュメントが表示されます。

source document

ターゲット文書は次のようにレンダリング:

bad rendering

どのように私はのListItemの書式を保持しますか?

これははるかに難しいようです。私が本当に望むのは、すべての書式を保持している新しい文書と、Googleスクリプトからユーザーの選択をそのままコピーすることです。

これはより高いレベルで実行されるようです。スクリプトからではなく、手動で書式をコピー&ペーストして保存することができます。

答えて

1

この原因は、Selectionの使用に問題があると推測しています。ドキュメントから直接読むことはうまくいくようです。

回避方法としてListItemをテキストとして追加してみてください。

target_body.appendListItem(copy_element.getText()); 

これは、書式設定ではなくテキストのみをコピーします。また、要素を直接コピーする代わりに新しいリストを作成して実装することもできます。参考になるサンプルSOがあります。

+0

私は実際には、より高いレベルからこれを行うために探しています。要素の種類の明示的なチェックは、私の好みではなく、保守可能ではありません。私はむしろ不愉快なアプローチを考えました。ドキュメント全体をコピー先にコピーして、不要なものを削除するだけです(問題は同じです)。 +1が、本当に私は後の答えではありません。 – bgoodr

0

私は同様の問題を抱えていました(ただし、選択肢は使用していません)。リストとしてコピーされましたが、実際の弾丸はありませんでした。私はちょうどこのような手動で弾丸を再設定しました:

target_body.appendListItem(copy_element).setGlyphType(DocumentApp.GlyphType.NUMBER) 
関連する問題