* Represents a table in a .pptx presentation\r
*/\r
public class XSLFTableRow implements Iterable<XSLFTableCell> {\r
- private CTTableRow _row;\r
- private List<XSLFTableCell> _cells;\r
- private XSLFTable _table;\r
+ private final CTTableRow _row;\r
+ private final List<XSLFTableCell> _cells;\r
+ private final XSLFTable _table;\r
\r
/*package*/ XSLFTableRow(CTTableRow row, XSLFTable table){\r
_row = row;\r
_table.updateRowColIndexes();\r
return cell;\r
}\r
+ \r
+ /**\r
+ * Merge cells of a table row, inclusive.\r
+ * Indices are 0-based.\r
+ *\r
+ * @param firstCol 0-based index of first column to merge, inclusive\r
+ * @param lastCol 0-based index of last column to merge, inclusive\r
+ */\r
+ public void mergeCells(int firstCol, int lastCol)\r
+ {\r
+ if (firstCol >= lastCol) {\r
+ throw new IllegalArgumentException(\r
+ "Cannot merge, first column >= last column : "\r
+ + firstCol + " >= " + lastCol\r
+ );\r
+ }\r
+\r
+ final int colSpan = (lastCol - firstCol) + 1;\r
\r
+ _cells.get(firstCol).setGridSpan(colSpan);\r
+ for (final XSLFTableCell cell : _cells.subList(firstCol+1, lastCol+1)) {\r
+ cell.setHMerge(true);\r
+ }\r
+ }\r
\r
}\r
package org.apache.poi.xslf.usermodel;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.List;
assertTrue(tc.getTcPr().getLnR().isSetNoFill());
}
+ @Test
+ public void mergeCells() {
+ try {
+ row.mergeCells(0, 0);
+ fail("expected IllegalArgumentException when merging fewer than 2 columns");
+ } catch (final IllegalArgumentException e) {
+ // expected
+ }
+
+ row.mergeCells(0, 1);
+ List<XSLFTableCell> cells = row.getCells();
+ //the top-left cell of a merged region is not regarded as merged
+ assertFalse("top-left cell of merged region", cells.get(0).isMerged());
+ assertTrue("inside merged region", cells.get(1).isMerged());
+ assertFalse("outside merged region", cells.get(2).isMerged());
+ }
+
@Test
public void getXmlObject() {
CTTableRow ctrow = row.getXmlObject();