您好我正在使用apache POI,我必须用它创建docx文件。 现在我迭代一个html文档并获取标签以创建一个有效的docx文档。
当我在tablecell中有一个表时,无法显示正确的表。
<table>
<tr>
<td style="text-align: left">Status</td>
<td>
<table>
<tr>
<td>test</td>
</tr>
</table>
</td>
</tr>
</table>
使用docx中的嵌套表加载正确的文件没有问题。
FileOutputStream fos = null;
XWPFDocument document = null;
try {
fos = new FileOutputStream(docRes);
if (fileType == docType.DOCX) {
try {
String fileName = "D:\\test.docx";
if (!(fileName.endsWith(".doc") || fileName.endsWith(".docx"))) {
throw new FileFormatException();
} else {
XWPFDocument doc = new XWPFDocument(new FileInputStream(fileName));
List<XWPFTable> table = doc.getTables();
}
}
}
}
当我再次保存此文件时,我在带有POI的Word中获得了一个嵌套表。
但是如何在不加载正确的docx文件的情况下创建嵌套表?
我检查了很多选项,但已经很简单的解决方案不起作用。
document = new XWPFDocument();
XWPFTable tableOne = document.createTable();
XWPFTableRow tableOneRow1 = tableOne.getRow(0);
XWPFTableRow tableOneRow2 = tableOne.createRow();
tableOneRow1.getCell(0).setText("Test");
tableOneRow1.addNewTableCell();
tableOneRow1.getCell(1).setText("Test");
tableOneRow2.getCell(0).setText("Test");
tableOneRow2.addNewTableCell();
tableOneRow2.getCell(1).setText("include nestedTable");
XWPFTable tableTwo = document.createTable();
XWPFTableRow tableTwoRow1 = tableTwo.getRow(0);
tableTwoRow1.getCell(0).setText("Test");
tableTwoRow1.addNewTableCell();
tableTwoRow1.getCell(0).setText("nestedTable");
tableOneRow2.getCell(1).insertTable(0, tableTwo);
来自docx的direclty加载变量的不同之处在于,在自制解决方案中,文档在文档根目录中有两个表。
如何构建嵌套表?
谢谢
菲利克斯希望答案 0 :(得分:0)
我没有对此进行过测试,但您可能需要查看XWPFTableCell类的文档
方法public void insertTable(int pos,XWPFTable table)
似乎正是您所寻找的。 p>
答案 1 :(得分:0)
在link之后,它可能是这样的:
public static void main(String[] args) throws Exception {
FileOutputStream out = new FileOutputStream(new File("word.docx"));
XWPFDocument document = new XWPFDocument();
XWPFTable tableOne = document.createTable();
XWPFTableRow tableOneRow1 = tableOne.getRow(0);
XWPFTableRow tableOneRow2 = tableOne.createRow();
tableOneRow1.getCell(0).setText("Test11");
tableOneRow1.addNewTableCell();
tableOneRow1.getCell(1).setText("Test12");
tableOneRow2.getCell(0).setText("Test21");
tableOneRow2.addNewTableCell();
XWPFTableCell cell = tableOneRow2.getCell(1);
CTTbl ctTbl = cell.getCTTc().addNewTbl();
ctTbl = cell.getCTTc().addNewTbl();
CTTblPr tblPr = ctTbl.addNewTblPr();
cell.removeParagraph(0);
cell.getCTTc().addNewP();
XWPFTable tableTwo = new XWPFTable(ctTbl,cell);
XWPFTableRow tableTwoRow1 = tableTwo.getRow(0);
tableTwoRow1.getCell(0).setText("nestedTable11");
tableTwoRow1.addNewTableCell();
tableTwoRow1.getCell(1).setText("nestedTable12");
document.write(out);
out.close();
}
或使用insertNewTbl(XmlCursor cursor)方法:
XWPFParagraph paragraph = tablerow.getCell(1).getParagraphs().get(0);
XmlCursor cursor = paragraph.getCTP().newCursor();
XWPFTable tableTwo = tablerow.getCell(1).insertNewTbl(cursor);