Apache POI:使用XWPFTableCell addParagraph(XWPFParagraph)向单元格添加元素

时间:2017-08-04 23:11:38

标签: java ms-word apache-poi

我希望从文档中读取的所有现有正文元素都写入表格单元格。这是代码。虽然sysout会写入元素文本,但段落不会添加到单元格中。

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());
        }
    }
}

任何帮助。感谢。

1 个答案:

答案 0 :(得分: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);
   }
  }
 }