You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by on...@apache.org on 2016/09/11 03:21:33 UTC

svn commit: r1760217 - in /poi/trunk/src/ooxml: java/org/apache/poi/xslf/usermodel/XSLFTableRow.java testcases/org/apache/poi/xslf/usermodel/TestXSLFTableRow.java

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-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org