2012-12-13 30 views
3

我試圖通過填寫表單來自動生成報告。數據由上一個電子表格行的腳本讀出。然後,該報告將作爲Google文檔製作。這裏的一些標籤顯示了這些項目應該在哪裏。 %meterx%是米。替換Google Doc表格中的文本以進行表格合併

這些可以是圖像或文字。對於正常的段落,這與第一個循環的類型=段很合適。但它跳過表格。我需要用圖像替換表格單元格中的%meterx%,就像我對段落所做的那樣,但我堅持在代碼中查看錶格。

我看到一些方法來替換文本,但這似乎是用圖像替換它的唯一方法。

var totalElements = doc.getNumChildren(); 
    var el=[] 
    for(var j = 0; j < totalElements; ++j) { 
    var element = doc.getChild(j); 
    var type = element.getType(); 

    if (type =='PARAGRAPH'){ 
     el[j]=element.getText() 

     if(el[j]=='%meter3%'){element.removeFromParent(); 
     var newimage = UrlFetchApp.fetch('http://chart.googleapis.com/chart?chf=bg,s,67676700&chs=280x150&cht=gm&chds=0,10&chd=t:'+row[4]+'&chdlp=b').getBlob(); 
     doc.insertImage(j, newimage); 

    if (type =='TABLE'){ 
     var tablerows=element.getNumRows(); 
     Logger.log(tablerows); 
     for (var i = 0; i < tablerows; ++i) { 
     var tablerow = element.getRow(0) 
     Logger.log(tablerow); // <--- gives TableRow 
     } /// STUCK !! :) 

回答

3

TableRow包含子元素,TableCell型的,其中還包含子元素。如果它們是空白或包含文本,那麼這些是PARAGRAPH類型。

您可以使用getText()訪問TableCell中的文本,但最好先確認該單元格包含文本。

下面的代碼處理PARAGRAPHTABLE元素類型,對於表格,它探索TABLECELL元素。我不知道你在處理數組時做了什麼,所以我把它留在了外面,並且還評論了圖像替換代碼 - 相反,我只是記錄了表格的結構和內容。爲了完成你的目標,你應該用&替換你的PARAGRAPH的行爲。

注:我正在使用一些輔助函數,這裏不詳細說明,這應該不言自明,getFileByName_()elementTypeToText_()

function Q13869576() { 
    var folder = "StackOverflow"; 
    var docname = "Q13869576.gdoc"; 
    var docId = getFileByName_(folder, docname).getId(); 

    var doc = DocumentApp.openById(docId); 
    var docBody = doc.getActiveSection(); 

    var totalElements = doc.getNumChildren(); 
    var el=[] 
    for(var j = 0; j < totalElements; ++j) { 
    var element = doc.getChild(j); 
    var type = element.getType(); 

    switch (type) { 
     case DocumentApp.ElementType.PARAGRAPH: 
     el[j]=element.getText() 

     if(el[j]=='%meter3%'){ 
      Logger.log("Found tag in paragraph"); 
//   element.removeFromParent(); 
//   var newimage = UrlFetchApp.fetch('http://chart.googleapis.com/chart?chf=bg,s,67676700&chs=280x150&cht=gm&chds=0,10&chd=t:'+row[4]+'&chdlp=b').getBlob(); 
//   doc.insertImage(j, newimage); 
     } 
     break; 

     case DocumentApp.ElementType.TABLE: 
     var tablerows=element.getNumRows(); 
     Logger.log(tablerows); 
     for (var row = 0; row < tablerows; ++row) { 
      var tablerow = element.getRow(row) 
      for (var cell=0; cell < tablerow.getNumCells(); ++cell) { 
      Logger.log("Table Row("+row+") Cell ("+cell+")"); 
      Logger.log(
        elementTypeToText_(tablerow.getChild(cell).getType()) 
        +" with child type " 
        +elementTypeToText_(tablerow.getChild(cell).getChild(0).getType())); 
      var celltext = tablerow.getChild(cell).getText(); 
      Logger.log("Text is ("+celltext+")"); 
      } 
     } 
     break; 
    } 
    } 
} 

這是從樣品DOC日誌的摘錄,包含的小區,其%meter3%標籤的表:

... 
Table Row(1) Cell (2) 
TABLE_CELL with child type PARAGRAPH 
Text is (%meter3%) 
... 
+0

我的代碼沒有確實完成。你非常幫助我!我在文檔中找不到這個,所以如果我問了一個明顯的問題,我很抱歉。 現在的報道工作很迷人,這是一個非常酷的工具! –

+0

這不是在文檔中 - 這是谷歌API的常見問題。但是,通常您可以發現任何對象的結構。我建議閱讀[使用對象](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects)開始。在這種情況下,我只是不斷嘗試'getChild()',就像它在日誌行中顯示的一樣。 – Mogsdad

相關問題