在poi中创建一个表非常简单,但它的教程非常有限,我找不到一个可以在生成docx文件时在表中创建简单合并单元格的教程。
为每个表行创建一个单独的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));
}
要水平/垂直合并,您需要创建2个CTHMerge并使用setVal:
a) 2x2表格的水平合并示例(带示例的图像):
|||--
// 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中的行的列。我在这个环节试了一下答案。如何合并单元格(或应用colspan)使用XWPFTable在POIJava?以及这个链接如何使用apache-poi水平合并单元格 它帮助我使细胞垂直合并。但横向合并并没有发生。我附上了我真正想要的样本截图。 谢谢
我要做一个垂直合并使用这个函数: 但我不能用类似的函数进行水平合并: 谢谢!
我有一个对象列表,我试图为每个对象指定三行,我使用的"Office Open Xml库"有以下例程: 然而,它弹出一个错误,说不能合并已经合并的单元格。 所以问题是如何在Excel中合并两个以上的单元格?
问题内容: 还有其他方法可以使用Apache POI库在Excel中合并单元格? 我正在尝试使用以下内容,但无法正常工作 问题答案: 您可以使用 该示例将从B2合并到E2。请记住,它是基于零的索引(例如POI版本3.12)。 有关详细信息,请参见《BusyDeveloper指南》。
我试着用下面的方法,但它不起作用
mergeCells(string $scope, string $data [, resource $formatHandler]): self string $scope $excel->fileName("test.xlsx") ->mergeCells('A1:C1', 'Merge cells') ->output();