在poi中创建表格非常简单,但它的教程非常有限,我无法找到能够在表格中创建简单合并单元格以生成docx文件的表格。如何在POI中使用XWPFTable在Java中合并单元格(或应用colspan)?
5
A
回答
7
如果您已经创建表,行内的桌子和细胞内的行,你可以添加网格扩展到单元格属性:
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 。
4
为每个表格行创建一个单独的XWPFTable
将工作,应该是完全正常的。所有的表格都在幕后合并到最终词汇文档中的一个表格中。您将需要所有这些罐子,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
的要合并水平/垂直您需要创建2 CTHMerge并使用SETVAL:
- 一个,你会留在细胞(STMerge.RESTART);
- 第二个为合并单元格(STMerge.CONTINUE);
一个)例如用于水平合并2×2表(image with example):
| ___________ | ___________ | - > | ___________ ___________ |
| ___________ | ___________ | - > | ___________ ___________ |
// First Row
CTHMerge hMerge = CTHMerge.Factory.newInstance();
vmerge.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();
hMerge.setVal(STMerge.CONTINUE);
table.getRow(0).getCell(1).getCTTc().getTcPr().setHMerge(hMerge1);
table.getRow(1).getCell(1).getCTTc().getTcPr().setHMerge(hMerge1);
b)中的垂直例如合并(image with example)
// 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();
vmerge.setVal(STMerge.CONTINUE);
table.getRow(1).getCell(0).getCTTc().getTcPr().setVMerge(vmerge1);
table.getRow(1).getCell(1).getCTTc().getTcPr().setVMerge(vmerge1);
+0
你的解决方案适用于我,但我添加了稍加修改,通过添加: 'if(cell.getCTTc()。getTcPr()== null)cell.getCTTc()。addNewTcPr();' – IronRabbit
相关问题
- 1. 用Apache POI引用XWPFTable中的单元格
- 2. 如何使用Apache POI合并同一行中的单元格?
- 3. 如何使用jsf h:panelGrid合并单元格(colspan)?
- 4. 如何合并/合并不带colspan的HTML表格单元格
- 5. Java Apache POI 3.7 XWPFTable单元格颜色更改
- 6. 如何在Java中使用JTable来合并单元格?
- 7. 使用apache poi合并并对齐中心单元格
- 8. 在没有colspan的其他单元格中使用表格单元格中的colspan = 2,即colspan = 1
- 9. 如何在Dhtmlx Grid view中应用rowspan和colspan到单元格
- 10. Apache POI(DOCX)XWPFTable不对称单元
- 11. 使用apache poi在合并单元格中水平居中图像
- 12. 在Java中使用POI读取单元格区域?
- 13. 如何在Excel中合并单元格?
- 14. 如何在NSOutlineView中合并单元格
- 15. 如何格式化Apache POI中的XWPFTable中的文本
- 16. 如何合并单元格到poi中的最后一行
- 17. 在Java中使用POI获取Excel单元格背景颜色并不匹配
- 18. 如何使用java + poi在excel中设置单元格背景颜色
- 19. 如何使用java poi在excel单元格中更改文本方向?
- 20. 如何使用c#在datagrid视图中拆分或合并单元格?
- 21. 如何在html中使用colspan,rowspan或css创建表格?
- 22. 使用HSSFRegionUtil(Apache POI)添加边框到合并单元格
- 23. 如何使用Apache poi更新现有的合并Excel单元
- 24. 使用单元格宽度和colspan
- 25. 如何在MS Word文档中使用apache POI在rowspan和colspan中创建表?
- 26. 如何使用Apache POI同时合并单元格和设置值?
- 27. 如何在PHPWord中合并单元格?或者在每个表格行中有不同数量的单元格?
- 28. 最大合并单元格内容长度 - Java POI 3.7
- 29. Apache POI在excel中创建单元格内的行或表格
- 30. 如何使用apache poi打破excel单元格中的文本
谢谢!精彩地工作。 –
当然,我投了这个答案。我认为我没有办法接受答案,因为我没有问原来的问题。让我知道这是否可行。 –
嗨,我尝试过使用它,它确实正确设置了一个单元格的跨度,但是我留在了表格之外的单元格(右边),等于跨度大小。我试图用XWPFTableRow.removeCell(pos)去除它们。我确认它们在java行对象中被删除,但是当表格呈现并在Word中查看时,它们仍然存在。你知道如何让这些多余的细胞消失吗? –