I need to have a table with the cells on the first and second row merged.
Something like this:
Image of table (I can\'t post pics) http://i.stack.imgur.com/d
It seems xml has to be removed as well:
XWPFTableCell removed = tableRow.getCell(idx);
removed.getCTTc().newCursor().removeXml();
tableRow.removeCell(idx);
To merge horizontally/vertically you need to create 2 CTHMerge and use the setVal:
a) example of a horizontal merge for a 2x2 table:
|___________|___________| --> |___________ ___________|
|___________|___________| --> |___________ ___________|
// 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) example of a vertical merge:
// 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);
You can also avoid creating the extra cells, instead of removing cells after the merge. It requires adding rows and cells sequentially (instead of using document.createTable())
For your example it would be: