\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
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
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
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
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
\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
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
\r
pr.setMarL(Units.toEMU(margin));\r
}\r
- \r
+\r
@Override\r
public void setRightInset(double margin){\r
CTTableCellProperties pr = getXmlObject().getTcPr();\r
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