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/dAO6j.png
I have been reviewing all the questions related to this topic and I have found some answers for applying grid span to the cells, but I couldn't find a real solution.
Here is the code I have from examples obtained from google and from this site:
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();
What I get from this code is the following:
I tried to remove the "extra" cells with table.getRow(0).removeCell(1);
but it didn't work, am I doing something wrong?
Select the cells that you want to merge. Under Table Tools, on the Layout tab, in the Merge group, click Merge Cells.
Merge cellsIn the table, drag the pointer across the cells that you want to merge. Click the Layout tab. In the Merge group, click Merge Cells.
Apache POI SS - HSSF XSSF - Merge Cells Sheet. addMergedRegion can be used to Merge Cells.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With