在poi中创建一个表格是比较容易的,但是教程非常有限,我找不到一个可以在生成docx文件时创建一个简单合并单元格的表格的教程。
在poi中创建一个表格是比较容易的,但是教程非常有限,我找不到一个可以在生成docx文件时创建一个简单合并单元格的表格的教程。
// First Row
CTHMerge hMerge = CTHMerge.Factory.newInstance();
hMerge.setVal(STMerge.RESTART);
table.getRow(0).getCell(0).getCTTc().getTcPr().setHMerge(hMerge);
table.getRow(1).getCell(0).getCTTc().getTcPr().setHMerge(hMerge);
// Secound Row cell will be merged/"deleted"
CTHMerge hMerge1 = CTHMerge.Factory.newInstance();
hMerge1.setVal(STMerge.CONTINUE);
table.getRow(0).getCell(1).getCTTc().getTcPr().setHMerge(hMerge1);
table.getRow(1).getCell(1).getCTTc().getTcPr().setHMerge(hMerge1);
b) 垂直合并示例 (带有示例图像)
// First Row
CTVMerge vmerge = CTVMerge.Factory.newInstance();
vmerge.setVal(STMerge.RESTART);
table.getRow(0).getCell(0).getCTTc().getTcPr().setVMerge(vmerge);
table.getRow(0).getCell(1).getCTTc().getTcPr().setVMerge(vmerge);
// Secound Row cell will be merged
CTVMerge vmerge1 = CTVMerge.Factory.newInstance();
vmerge1.setVal(STMerge.CONTINUE);
table.getRow(1).getCell(0).getCTTc().getTcPr().setVMerge(vmerge1);
table.getRow(1).getCell(1).getCTTc().getTcPr().setVMerge(vmerge1);
如果您已经创建了表格、表格中的行和行中的单元格,您可以在单元格属性中添加gridSpan:
if (cell.getCTTc().getTcPr() == null) cell.getCTTc().addNewTcPr();
if (cell.getCTTc().getTcPr().getGridSpan() == null) cell.getCTTc().getTcPr().addNewGridSpan();
cell.getCTTc().getTcPr().getGridSpan().setVal(2);
org.apache.poi.xwpf.usermodel.XWPFTableCell
。为每个表格行创建一个单独的XWPFTable
将起作用,并且应该完全没有问题。在最终的Word文档中,所有表格都在后台合并成一个表格。您需要这些JAR文件:poi-3.9.jar
、poi-ooxml-3.9.jar
和poi-ooxml-schemas-3.9.jar
XWPFTable table1 = document.createTable(1,1); // This is your row 1
XWPFTable table2 = document.createTable(1,3); // This is your row 2
// Now it's time to span each column of table1 and table2 to a span of your choice
// lets say 6 is the total span required assuming there's some row with 6 columns.
spanCellsAcrossRow(table1, 0, 0, 6);
spanCellsAcrossRow(table2, 0, 0, 2);
spanCellsAcrossRow(table2, 0, 1, 2);
spanCellsAcrossRow(table2, 0, 2, 2);
private void spanCellsAcrossRow(XWPFTable table, int rowNum, int colNum, int span) {
XWPFTableCell cell = table.getRow(rowNum).getCell(colNum);
cell.getCTTc().getTcPr().addNewGridSpan();
cell.getCTTc().getTcPr().getGridSpan().setVal(BigInteger.valueOf((long)span));
}
if (cell.getCTTc().getTcPr() == null) cell.getCTTc().addNewTcPr();
- IronRabbitprivate static void mergeCellsHorizontally(XWPFTable table, int rowNr, int cellFrom, int cellTo) { CTHMerge mergeStart = CTHMerge.Factory.newInstance(); mergeStart.setVal(STMerge.RESTART); table.getRow(rowNr).getCell(cellFrom).getCTTc().getTcPr().setHMerge(mergeStart); for (int i = cellFrom + 1; i <= cellTo; i++) { CTHMerge mergeContinue = CTHMerge.Factory.newInstance(); mergeContinue.setVal(STMerge.CONTINUE); table.getRow(rowNr).getCell(i).getCTTc().getTcPr().setHMerge(mergeContinue); } }
- Wexoo