Author: onealj Date: Sun Sep 11 03:21:33 2016 New Revision: 1760217 URL: http://svn.apache.org/viewvc?rev=1760217&view=rev Log: bug 58191: Support merge cells within a table row; patch from Mark Olesen
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableRow.java poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTableRow.java Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableRow.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableRow.java?rev=1760217&r1=1760216&r2=1760217&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableRow.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableRow.java Sun Sep 11 03:21:33 2016 @@ -32,9 +32,9 @@ import org.openxmlformats.schemas.drawin * Represents a table in a .pptx presentation */ public class XSLFTableRow implements Iterable<XSLFTableCell> { - private CTTableRow _row; - private List<XSLFTableCell> _cells; - private XSLFTable _table; + private final CTTableRow _row; + private final List<XSLFTableCell> _cells; + private final XSLFTable _table; /*package*/ XSLFTableRow(CTTableRow row, XSLFTable table){ _row = row; @@ -78,6 +78,29 @@ public class XSLFTableRow implements Ite _table.updateRowColIndexes(); return cell; } + + /** + * Merge cells of a table row, inclusive. + * Indices are 0-based. + * + * @param firstCol 0-based index of first column to merge, inclusive + * @param lastCol 0-based index of last column to merge, inclusive + */ + public void mergeCells(int firstCol, int lastCol) + { + if (firstCol >= lastCol) { + throw new IllegalArgumentException( + "Cannot merge, first column >= last column : " + + firstCol + " >= " + lastCol + ); + } + + final int colSpan = (lastCol - firstCol) + 1; + _cells.get(firstCol).setGridSpan(colSpan); + for (final XSLFTableCell cell : _cells.subList(firstCol+1, lastCol+1)) { + cell.setHMerge(true); + } + } } Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTableRow.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTableRow.java?rev=1760217&r1=1760216&r2=1760217&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTableRow.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTableRow.java Sun Sep 11 03:21:33 2016 @@ -17,9 +17,11 @@ 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; @@ -104,6 +106,23 @@ public class TestXSLFTableRow { } @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(); assertNotNull(ctrow); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org For additional commands, e-mail: commits-h...@poi.apache.org