使用Apache POI创建的Docx中的重复表段落

时间:2014-07-09 17:44:19

标签: java apache apache-poi

我使用Apache POI创建包含表格的docx。

为了格式化表格,我使用此方法向单元格添加段落:

private XWPFParagraph getTableParagraph(XWPFDocument document, XWPFParagraph paragraph, String text, boolean bold, boolean wrap, boolean allineaDx){
    if (paragraph == null) paragraph = document.createParagraph();
    XWPFRun p2run = paragraph.createRun();

    p2run.setText(text);

    p2run.setFontSize(5);
    p2run.setBold(bold);

    if (wrap) paragraph.setWordWrap(wrap);
    if (allineaDx) paragraph.setAlignment(ParagraphAlignment.RIGHT);

    return paragraph;
}

我用以下方法调用方法:

        XWPFTableRow tableOneRowOne = tableOne.getRow(0);
        tableOneRowOne.getCell(0).setParagraph(getTableParagraph(document, tableOneRowOne.getCell(0).getParagraphArray(0), "some text", true, true, false));  

表格根据需要显示,但在表格末尾也可以看到创建并插入单元格中的所有段落。为什么?我该如何防止这种情况?

1 个答案:

答案 0 :(得分:0)

问题解决了

复制是由document.createParagraph()。

引起的

我将方法改为:

private XWPFParagraph getTableParagraph(XWPFTableCell cell, String text, boolean bold, boolean wrap, boolean allineaDx) throws Exception{

    XWPFParagraph paragraph = cell.addParagraph();
    cell.removeParagraph(0);

    XWPFRun p2run = paragraph.createRun();

    p2run.setText(text);

    p2run.setFontSize(5);
    p2run.setBold(bold);

    if (wrap) paragraph.setWordWrap(wrap);
    if (allineaDx) paragraph.setAlignment(ParagraphAlignment.RIGHT);

    return paragraph;
}

现在一切正常。请注意cell.removeParagraph(0)

单元格自带一个空段落,添加一个新段落最终会在单元格内部出现重复的段落。删除原始段落工作正常。