2014-03-12 30 views
0

我有一個包含多個頁面的Google文檔。我想通過應用程序使用的分頁符將其分開,並將每個頁面保存到單獨的文件中。值得注意的是,這個文件也包含了圖片。使用Google腳本來分隔Google文檔

無論如何,我已經看過谷歌腳本提供了什麼,它似乎沒有任何方便的功能來分割頁面的文件。我至今是:

var current = DocumentApp.getActiveDocument(); 
var body = current.getBody(); 
var paragraphs = body.getParagraphs(); 

所以,我能夠深入到我的文檔,並獲得段落,但我不知道在哪裏可以從這裏走。我的思考過程是獲取段落,將它們全部附加到一個字符串中,然後在分頁符處將其拆分。從那裏,我可以輕鬆創建新文檔並保存。但是,一旦我有段落,我沒有看到一個方法來獲得分頁。另外,圖像如何處理?每個圖像都在它自己的頁面上,它們每個都是自己的段落?

所以,我在這個問題上主要關心的是如何按頁分解我的文檔。任何幫助都很好。

回答

1

好,花了相當長的一段黑客,但我想出了東西,做了什麼,我需要它:

function splitAndSave() 
{ 

    var folder = getFolderName(); 
    if (folder == null) 
    { 
    return false; 
    } 

var PB = Doc().ElementType.PAGE_BREAK; 

var doc = Doc().getActiveDocument(); 
var body = doc.getBody(); 
var par = body.getParagraphs(); 

var curPage = 1; 

    // Naming scheme for files 
var page = Doc().create("pg" + curPage); 

for (var i = 0; i < par.length; i++) 
{ 
    var hasbreak = false; 
    for (var j = 0; j < par[i].getNumChildren(); j++) 
    { 
     var child = par[i].getChild(j); 
     if (child.getType() == PB) 
     { 
      hasbreak = true; 
      break; 
     } 
    } 

    if (!hasbreak) 
    { 
     var seppar = par[i].copy(); 
     page.getBody().appendParagraph(seppar); 
    } 
    else 
    { 
     var par1 = par[i].copy(); 
     var par2 = par[1].copy(); 

     var hitbreak = false; 
     for (var i1 = 0; i1 < par1.getNumChildren(); i1++) 
     { 
      if (par1.getChild(i1).getType() == PB) 
      { 
       hitbreak = true; 
      } 

      if (hitbreak) 
      { 
       par1.removeChild(par1.getChild(i1)); 
      } 
     } 

     var hitbreak = false; 
     for (var i1 = 0; i1 < par2.getNumChildren(); i1++) 
     { 
      if (par2.getChild(i1).getType() == PB) 
      { 
       hitbreak = true; 
      } 

      if (!hitbreak || par2.getChild(i1).getType() == PB) 
      { 
       par2.removeChild(par2.getChild(i1)); 
      } 
     } 

     page.getBody().appendParagraph(par1); 

     // Add file to folder 
     page.saveAndClose(); 

     var file = DocsList.getFileById(page.getId()); 
     file.addToFolder(folder); 

     // Need this step or your file ends up in two places 
     file.removeFromFolder(DocsList.getRootFolder()); 

     curPage++; 
        // Naming scheme for files 
     page = Doc().create("pg" + curPage); 

     page.getBody().appendParagraph(par2); 
    } 
} 

page.saveAndClose(); 

var file = DocsList.getFileById(page.getId()); 
file.addToFolder(folder); 

// Need this step or your file ends up in two places 
file.removeFromFolder(DocsList.getRootFolder()); 
Ui().alert("Saving process complete"); 
} 

輔助函數來獲取文件夾名稱:

function getFolderName() 
{ 
var response = Ui().prompt("Enter a folder name"); 
if (response.getSelectedButton() == Ui().Button.OK) 
{ 
    var folder = DocsList.createFolder(response.getResponseText()); 
    return folder; 
} 
else 
{ 
    return null; 
} 
} 

其他傭工:

function Doc() 
{ 
return DocumentApp; 
} 

function Ui() 
{ 
return Doc().getUi(); 
} 

這將按照命名約定「pg」+「增量」分頁的Google文檔編號。它還將它們放入提示中指定的文件夾中。

這裏需要注意的是,在您打算拆分的文檔中,您需要在每個頁面的末尾放置分頁符。所以,基本上,當你移動到下一頁時,按下CTRL + ENTER。這不是什麼大不了的事情,而且事實上要快得多,直到你重新打開一個新頁面。

哦,而且速度很慢。這對我來說並不重要,因爲我只需要偶爾使用它。

相關問題