我需要有一个表,第一行和第二行的单元格合并。
这样的事情:
桌子的图像(我不能发布照片)http://i.stack.imgur.com/dAO6j.png
我一直在回顾与此主题相关的所有问题,我找到了将网格跨度应用于单元格的一些答案,但我找不到真正的解决方案。
以下是我从谷歌和本网站获得的示例中的代码:
XWPFDocument document = new XWPFDocument();
XWPFTable table = document.createTable(7, 2);
fillTable(table);
XWPFTableCell cellRow1 = table.getRow(0).getCell(0);
XWPFTableCell cellRow2 = table.getRow(1).getCell(0);
cellRow1.getCTTc().addNewTcPr();
cellRow1.getCTTc().getTcPr().addNewGridSpan();
cellRow1.getCTTc().getTcPr().getGridSpan().setVal(BigInteger.valueOf(2L));
cellRow2.getCTTc().addNewTcPr();
cellRow2.getCTTc().getTcPr().addNewGridSpan();
cellRow2.getCTTc().getTcPr().getGridSpan().setVal(BigInteger.valueOf(2L));
FileOutputStream out = new FileOutputStream("Table.docx");
doc.write(out);
out.close();
我从这段代码得到的是:
我试图用table.getRow(0).removeCell(1);
移除“额外”单元格,但它不起作用,我做错了什么?
答案 0 :(得分:3)
似乎还必须删除xml:
XWPFTableCell removed = tableRow.getCell(idx);
removed.getCTTc().newCursor().removeXml();
tableRow.removeCell(idx);
答案 1 :(得分:1)
要水平/垂直合并,您需要创建2个CTHMerge并使用setVal:
a)2x2表的水平合并示例:
| ___________ | ___________ | - > | ___________ ___________ |
| ___________ | ___________ | - > | ___________ ___________ |
// 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)垂直合并的示例:
// 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);
答案 2 :(得分:0)
您还可以避免创建额外的单元格,而不是在合并后删除单元格。它需要按顺序添加行和单元格(而不是使用document.createTable()
)
对于你的例子,它将是: