使用Apache poi插入具有不同列号的新表行

时间:2018-06-04 09:07:19

标签: java apache ms-word apache-poi

我有一个包含1行和2列的Word表,我想使用带有Java的Apache poi插入一个包含3列的新行。我想要实现的是:

picture_1

但我得到的是:

picture_2

我在互联网上搜索了一个解决方案,但我得到的只是设置列宽,这对我的情况不起作用。任何人都可以帮我解决这个问题吗?

这是我从Stack Overflow中的一个示例中获取的代码,用于处理第二张图片中显示的输出:

    File file = new File("C:\\Users\\USER\\Desktop\\testdoc.docx");
    XWPFDocument doc = new XWPFDocument(new FileInputStream(file));
    FileOutputStream out = new FileOutputStream(file);

    XWPFTable table = doc.getTableArray(0);
    XWPFTableRow oldRow = table.getRow(0);
    table.insertNewTableRow(1);
    XWPFTableRow newRow = table.getRow(1);

    int indWidth = 0;

    for(int i=0; i < oldRow.getTableCells().size(); i++) {
        int sum = 0;
        BigInteger width = oldRow.getCell(i).getCTTc().getTcPr().getTcW().getW();
        sum += width.intValue();

        indWidth = sum/oldRow.getTableCells().size();
    }

    XWPFTableCell cell;
    for (int i = 0; i < 3; i++) {
        cell = newRow.createCell();

        CTTcPr ctTcPr = cell.getCTTc().addNewTcPr();

        CTTblWidth cellWidth = ctTcPr.addNewTcW();
        cellWidth.setType(oldRow.getCell(0).getCTTc().getTcPr().getTcW().getType());  // sets type of width
        BigInteger width = BigInteger.valueOf(indWidth);
        cellWidth.setW(width);  // sets width

        if (oldRow.getCell(0).getCTTc().getTcPr().getGridSpan() != null) {
            ctTcPr.setGridSpan(oldRow.getCell(0).getCTTc().getTcPr().getGridSpan()); // sets grid span if any
        }

        XWPFRun run = cell.getParagraphs().get(0).createRun();
        run.setText("NewRow C" + i); 
    }

    doc.write(out);
    doc.close();

    System.out.println("Done");

}

1 个答案:

答案 0 :(得分:0)

我可以为java世界提出一个解决方案,但不能用poi ...

使用pxDoc(www.pxdoc.fr,免责声明:我是其作者之一......),使用以下代码可以完美实现:

document {
    table {
        row {
            cell { "Column 1" }
            cell { "Column 2" }
        }
        row {
            for (var i = 0; i < 3; i++) {
                cell {
                    "NewRow C" + i
                }
            }
        }
    }
}