2017-08-04 106 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