如何在poi单词中将表插入单元格?

时间:2017-04-07 07:03:55

标签: apache-poi

我想在一个单元格中插入一个表格,我做了一个演示但是失败了,有人可以给出一些建议吗?

    XWPFDocument document = new XWPFDocument();
    XWPFTable tableTwo = document.createTable(1,1);
    XWPFTableRow tableTwoRow1 = tableTwo.getRow(0);
    tableTwoRow1.getCell(0).setText("aaaaaaaaaa");
    XWPFTable tableOne = document.createTable(2,2);
    XWPFTableRow tableOneRow1 = tableOne.getRow(0);
    XWPFTableRow tableOneRow2 = tableOne.getRow(1);
    tableOneRow1.getCell(0).setText("Test");
    tableOneRow1.getCell(1).setText("Test");
    tableOneRow2.getCell(0).setText("Test");
    tableOneRow2.getCell(1).insertTable(0, tableTwo);
    FileOutputStream fos = new FileOutputStream("D:\\2.docx");
    document.write(fos);
    fos.close();

1 个答案:

答案 0 :(得分:3)

使用XWPFTable创建的XWPFDocument.createTable将始终属于该文档。因此,以后不能从文档中删除并将其放入单元格中。

为此,需要XWPFTableCell.insertNewTbl

以下代码使用实际的apache poi版本:

import java.io.*;

import org.apache.poi.xwpf.usermodel.*;

public class CreateWordTableInTable {

 public static void main(String[] args) throws Exception {

    XWPFDocument document = new XWPFDocument();

    XWPFTable tableOne = document.createTable(2,2);
    XWPFTableRow tablerow = tableOne.getRow(0);
    tablerow.getCell(0).setText("Test");
    tablerow.getCell(1).setText("Test");

    tablerow = tableOne.getRow(1);
    tablerow.getCell(0).setText("Test");

    XWPFParagraph paragraph = tablerow.getCell(1).getParagraphArray(0);
    XWPFTable tableTwo = tablerow.getCell(1).insertNewTbl(paragraph.getCTP().newCursor());

    tableTwo.getCTTbl().addNewTblPr().addNewTblBorders().addNewLeft().setVal(
     org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);
    tableTwo.getCTTbl().getTblPr().getTblBorders().addNewRight().setVal(
     org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);
    tableTwo.getCTTbl().getTblPr().getTblBorders().addNewTop().setVal(
     org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);
    tableTwo.getCTTbl().getTblPr().getTblBorders().addNewBottom().setVal(
     org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);
    tableTwo.getCTTbl().getTblPr().getTblBorders().addNewInsideH().setVal(
     org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);
    tableTwo.getCTTbl().getTblPr().getTblBorders().addNewInsideV().setVal(
     org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);

    tablerow = tableTwo.createRow();
    tablerow.createCell().setText("aaaaaaaaaa");
    tablerow.createCell().setText("jjjjjjjj"); 
    tablerow = tableTwo.createRow(); 
    tablerow.getCell(0).setText("bbbbbbbbbb"); 
    tablerow.getCell(1).setText("gggggggggg");

    document.write(new FileOutputStream("CreateWordTableInTable.docx"));
    document.close();

 }
}

但我强烈建议不要使用这种方法,而是使用合并的单元格。表格单元格中包含的表格很难看。对于HTML以及Word以及可以包含表格的所有其他文本文档格式都是如此。