2014-02-23 62 views
1

我正在嘗試編寫一個函數,將所有段落的文檔合併到一個段落中。要做到這一點,我使用的merge方法這種方式(joinAndInsert變量是一個文件ID):如何將所有段落合併成一個段落,當體內有其他元素類型?

if(joinAndInsert){ 
    Logger.log("joinAndInsert = " + joinAndInsert); 
    var paragraphs = DocumentApp.openById(docId).getBody().getParagraphs(); 
    Logger.log("paragraphs = " + paragraphs); 
    for (var c=0; c<paragraphs.length; c++){ 
    var par = paragraphs[c]; 
     if(par.getType() == DocumentApp.ElementType.PARAGRAPH) { 
     par.merge(); 
    } 
    var text = DocumentApp.openById(docId).getBody().getParagraphs(); 
    var insertedDoc = DocumentApp.openById(joinAndInsert).editAsText().insertText(0, text); 
    } 
    } 

文檔的本體有時具有LIST_ITEM對象。儘管我的if條件,我得到一個錯誤,說對象必須是與merge方法工作相同的類型。

有沒有辦法將LIST_ITEM或其他類型轉換爲段落?有沒有其他方法可以將所有段落合併爲一個段落任務?

+0

你好craftApprentice,你能告訴我什麼是最終性:你想刪除所有不是一個段落,你想提取整個文檔的文本,你想要得到的一切都是HTML(這是一個新的功能),文本字體和其他屬性對你來說很重要嗎? – Harold

+0

嗨,@哈羅德,我只是想將所有段落合併成一個大段落,保留已加入段落的格式化(粗體字等)。 – craftApprentice

+0

但如何處理圖像和繪圖,只需刪除?關於表格和列表,合併他們的文本並忽略他們不同的「位置」? –

回答

0

調用第一個段落元素的合併可能會導致錯誤,因爲沒有以前的同級合併它。

如果列表項是段落的兄弟,那麼在調用合併時也可能導致錯誤。通過跟蹤for循環中的前一個兄弟類型,並且只在前一個兄弟元素是段落元素時才調用合併,可以避免這種錯誤。

也許可以通過將列表轉換爲段落,方法是將它們轉換爲新創建的段落元素的子元素,以代替它們。我對Google文檔結構知之甚少,無法確定這是否被允許。

+0

如何實現這個「把你的列表轉換成段落,把它們變成新創建的段落元素的子元素,取代它們。」 – craftApprentice

+0

永遠不要在意這個想法,我檢查了API頁面[這裏](https://developers.google.com/apps-script/reference/document/paragraph),它看起來像段落不能有列表作爲子元素。 –

相關問題