]> source.dussan.org Git - poi.git/commitdiff
Bugzilla 52658: support mergin table cells in XSLF
authorYegor Kozlov <yegor@apache.org>
Tue, 14 Feb 2012 07:02:54 +0000 (07:02 +0000)
committerYegor Kozlov <yegor@apache.org>
Tue, 14 Feb 2012 07:02:54 +0000 (07:02 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1243793 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java

index e4a391cd11cb561cb3116ec78bcccc26bd3b7805..e4022e7a643f0d28216c1791129b29521a94efc4 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta6" date="2012-??-??">
+           <action dev="poi-developers" type="add">52658 - support mergin table cells in XSLF</action>
            <action dev="poi-developers" type="add">validate row number and column index in SXSSF when creating new rows / cells</action>
            <action dev="poi-developers" type="fix">51498 - fixed evaluation of blank cells in COUNTIF</action>
            <action dev="poi-developers" type="add">52576 - support changing external file references in HSSFWorkbook</action>
index 5f9713e7ee35fbd212345396457f9815f38feded..b8b269050954e3e4c69a2f97bac53f101b957635 100644 (file)
 \r
 package org.apache.poi.xslf.usermodel;\r
 \r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+\r
+import javax.xml.namespace.QName;\r
+\r
 import org.apache.poi.POIXMLException;\r
 import org.apache.poi.util.Internal;\r
 import org.apache.poi.util.Units;\r
@@ -26,7 +33,6 @@ import org.apache.xmlbeans.XmlCursor;
 import org.apache.xmlbeans.XmlException;\r
 import org.apache.xmlbeans.XmlObject;\r
 import org.apache.xmlbeans.impl.values.XmlAnyTypeImpl;\r
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTDTable;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObjectData;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTable;\r
@@ -34,12 +40,6 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTTableRow;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame;\r
 import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrameNonVisual;\r
 \r
-import javax.xml.namespace.QName;\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
 /**\r
  * Represents a table in a .pptx presentation\r
  *\r
@@ -122,7 +122,7 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable<XSLFTableRow
         cnv.setId(shapeId + 1);\r
         nvGr.addNewCNvGraphicFramePr().addNewGraphicFrameLocks().setNoGrp(true);\r
         nvGr.addNewNvPr();\r
-        \r
+\r
         frame.addNewXfrm();\r
         CTGraphicalObjectData gr = frame.addNewGraphic().addNewGraphicData();\r
         XmlCursor cursor = gr.newCursor();\r
@@ -135,4 +135,55 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable<XSLFTableRow
         gr.setUri(TABLE_URI);\r
         return frame;\r
     }\r
+\r
+    /**\r
+     * Merge cells of a table\r
+     */\r
+    public void mergeCells(int firstRow, int lastRow, int firstCol, int lastCol) {\r
+\r
+       if(firstRow > lastRow) {\r
+               throw new IllegalArgumentException(\r
+                       "Cannot merge, first row > last row : "\r
+                       + firstRow + " > " + lastRow\r
+               );\r
+       }\r
+\r
+       if(firstCol > lastCol) {\r
+               throw new IllegalArgumentException(\r
+                       "Cannot merge, first column > last column : "\r
+                       + firstCol + " > " + lastCol\r
+               );\r
+       }\r
+\r
+       int rowSpan = (lastRow - firstRow) + 1;\r
+       boolean mergeRowRequired = rowSpan > 1;\r
+\r
+       int colSpan = (lastCol - firstCol) + 1;\r
+       boolean mergeColumnRequired = colSpan > 1;\r
+\r
+       for(int i = firstRow; i <= lastRow; i++) {\r
+\r
+               XSLFTableRow row = _rows.get(i);\r
+\r
+               for(int colPos = firstCol; colPos <= lastCol; colPos++) {\r
+\r
+                       XSLFTableCell cell = row.getCells().get(colPos);\r
+\r
+                       if(mergeRowRequired) {\r
+                               if(i == firstRow) {\r
+                                       cell.setRowSpan(rowSpan);\r
+                               } else {\r
+                                       cell.setVMerge(true);\r
+                               }\r
+                       }\r
+                       if(mergeColumnRequired) {\r
+                               if(colPos == firstCol) {\r
+                                       cell.setGridSpan(colSpan);\r
+                               } else {\r
+                                       cell.setHMerge(true);\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+    }\r
 }\r
index f3d4400aa06cf9d1d0c08d50a293864b065debc1..df63212af66972f91a344611380b457251ea59ca 100644 (file)
@@ -19,6 +19,8 @@
 \r
 package org.apache.poi.xslf.usermodel;\r
 \r
+import java.awt.Color;\r
+\r
 import org.apache.poi.util.Units;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.CTLineEndProperties;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.CTLineProperties;\r
@@ -35,8 +37,6 @@ import org.openxmlformats.schemas.drawingml.x2006.main.STLineEndWidth;
 import org.openxmlformats.schemas.drawingml.x2006.main.STPenAlignment;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.STPresetLineDashVal;\r
 \r
-import java.awt.Color;\r
-\r
 /**\r
  * Represents a cell of a table in a .pptx presentation\r
  *\r
@@ -83,7 +83,7 @@ public class XSLFTableCell extends XSLFTextShape {
 \r
         pr.setMarL(Units.toEMU(margin));\r
     }\r
-    \r
+\r
     @Override\r
     public void setRightInset(double margin){\r
         CTTableCellProperties pr = getXmlObject().getTcPr();\r
@@ -284,4 +284,19 @@ public class XSLFTableCell extends XSLFTextShape {
         return new Color(0xFF & val[0], 0xFF & val[1], 0xFF & val[2]);\r
     }\r
 \r
+    void setGridSpan(int gridSpan_) {\r
+       getXmlObject().setGridSpan(gridSpan_);\r
+    }\r
+\r
+    void setRowSpan(int rowSpan_) {\r
+       getXmlObject().setRowSpan(rowSpan_);\r
+    }\r
+\r
+    void setHMerge(boolean merge_) {\r
+       getXmlObject().setHMerge(merge_);\r
+    }\r
+\r
+    void setVMerge(boolean merge_) {\r
+       getXmlObject().setVMerge(merge_);\r
+    }\r
 }\r