2017-08-04 142 views
1

我希望從文檔讀取的所有現有主體元素都寫入到表格單元格中。這是代碼。雖然sysout寫入元素文本,但段落不會被添加到單元格中。Apache POI:使用XWPFTableCell將元素添加到單元格addParagraph(XWPFParagraph)

public static void insertElementsToTableCell(XWPFTableCell cell, List<IBodyElement> elements) 
{ 
    for (Integer n = 0; n < elements.size(); n++) 
    { 
     IBodyElement element = elements.get(n); 
     if (element instanceof XWPFParagraph) 
     { 
      cell.addParagraph((XWPFParagraph) element); 
      System.out.println(((XWPFParagraph) element).getParagraphText()); 
     } 
    } 
} 

任何幫助。謝謝。

回答

0

不清楚爲什麼void addParagraph(XWPFParagraph p)是公共所有,因爲它只能結合public XWPFParagraph addParagraph(),因爲只有後者將加入paragrap的XML到細胞的XMLaddParagraph(XWPFParagraph p)僅將段落添加到單元格的段落的內部列表中,但不以任何方式更改XML

看看XWPFTableCell.java看到。

我們可以首先創建一個新的XWPFParagraph添加到單元的CTTc,然後使用addParagraph(XWPFParagraph p)這個新的段落。但是,我們也可以只使用低級元素。

儘管如此,我們應該將該段落添加到單元格段落的內部列表中,以防我們稍後需要通過cell.getParagraphs()與單元格中的段落列表配合使用。

但是public void addParagraph(XWPFParagraph p)缺少更新protected List<IBodyElement> bodyElements。因此public List<IBodyElement> getBodyElements()將段落添加到單元格後會出錯。但是在使用public XWPFParagraph addParagraph()添加空白段落後也是如此。在XWPFTableCell中沒有提供可用的方法來糾正此問題。

public static void insertElementsToTableCell(XWPFTableCell cell, List<IBodyElement> elements) { 
    for (IBodyElement element : elements) { 
    if (element instanceof XWPFParagraph) { 
    XWPFParagraph paragraph = (XWPFParagraph) element; 
    cell.getCTTc().getPList().add(paragraph.getCTP()); 
    //System.out.println(cell.getCTTc()); 
    cell.addParagraph(paragraph); 
    } 
    } 
} 
+0

謝謝。這工作。其實發現了cell.addParagraph(段落);沒有做任何事情。評論這條線是否也是如此。 – Vijai

+0

@Vijai:'cell.addParagraph(paragraph)'將段落添加到單元格段落的內部列表中。不使用它,從'cell.getParagraphs()'得到的'List'將不包含該段落。 –

+0

明白了。謝謝。 – Vijai