import java.util.ArrayList;
import java.util.Collections;
+import java.util.EnumMap;
+import java.util.HashMap;
import java.util.List;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
-
+/**
+ * XWPFTableCell class.
+ *
+ * @author Gregg Morris (gregg dot morris at gmail dot com) - added XWPFVertAlign enum,
+ * setColor(),
+ * setVerticalAlignment()
+ */
public class XWPFTableCell implements IBody {
private final CTTc ctTc;
protected List<XWPFParagraph> paragraphs = null;
protected List<IBodyElement> bodyElements = null;
protected IBody part;
private XWPFTableRow tableRow = null;
+ // Create a map from this XWPF-level enum to the STVerticalJc.Enum values
+ public static enum XWPFVertAlign { TOP, CENTER, BOTH, BOTTOM };
+ private static EnumMap<XWPFVertAlign, STVerticalJc.Enum> alignMap;
+ // Create a map from the STVerticalJc.Enum values to the XWPF-level enums
+ private static HashMap<Integer, XWPFVertAlign> stVertAlignTypeMap;
+
+ static {
+ // populate enum maps
+ alignMap = new EnumMap<XWPFVertAlign, STVerticalJc.Enum>(XWPFVertAlign.class);
+ alignMap.put(XWPFVertAlign.TOP, STVerticalJc.Enum.forInt(STVerticalJc.INT_TOP));
+ alignMap.put(XWPFVertAlign.CENTER, STVerticalJc.Enum.forInt(STVerticalJc.INT_CENTER));
+ alignMap.put(XWPFVertAlign.BOTH, STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTH));
+ alignMap.put(XWPFVertAlign.BOTTOM, STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTTOM));
+
+ stVertAlignTypeMap = new HashMap<Integer, XWPFVertAlign>();
+ stVertAlignTypeMap.put(STVerticalJc.INT_TOP, XWPFVertAlign.TOP);
+ stVertAlignTypeMap.put(STVerticalJc.INT_CENTER, XWPFVertAlign.CENTER);
+ stVertAlignTypeMap.put(STVerticalJc.INT_BOTH, XWPFVertAlign.BOTH);
+ stVertAlignTypeMap.put(STVerticalJc.INT_BOTTOM, XWPFVertAlign.BOTTOM);
+
+ }
+
/**
* If a table cell does not include at least one block-level element, then this document shall be considered corrupt
*/
return tableRow;
}
+ /**
+ * Set cell color. This sets some associated values; for finer control
+ * you may want to access these elements individually.
+ * @param rgbStr - the desired cell color, in the hex form "RRGGBB".
+ */
+ public void setColor(String rgbStr) {
+ CTTcPr tcpr = ctTc.isSetTcPr() ? ctTc.getTcPr() : ctTc.addNewTcPr();
+ CTShd ctshd = tcpr.isSetShd() ? tcpr.getShd() : tcpr.addNewShd();
+ ctshd.setColor("auto");
+ ctshd.setVal(STShd.CLEAR);
+ ctshd.setFill(rgbStr);
+ }
+
+ /**
+ * Get cell color. Note that this method only returns the "fill" value.
+ * @return RGB string of cell color
+ */
+ public String getColor() {
+ String color = null;
+ CTTcPr tcpr = ctTc.getTcPr();
+ if (tcpr != null) {
+ CTShd ctshd = tcpr.getShd();
+ if (ctshd != null) {
+ color = ctshd.xgetFill().getStringValue();
+ }
+ }
+ return color;
+ }
+
+ /**
+ * Set the vertical alignment of the cell.
+ * @param vAlign - the desired alignment enum value
+ */
+ public void setVerticalAlignment(XWPFVertAlign vAlign) {
+ CTTcPr tcpr = ctTc.isSetTcPr() ? ctTc.getTcPr() : ctTc.addNewTcPr();
+ CTVerticalJc va = tcpr.addNewVAlign();
+ va.setVal(alignMap.get(vAlign));
+ }
+
+ /**
+ * Get the vertical alignment of the cell.
+ * @return the cell alignment enum value
+ */
+ public XWPFVertAlign getVerticalAlignment() {
+ XWPFVertAlign vAlign = null;
+ CTTcPr tcpr = ctTc.getTcPr();
+ if (ctTc != null) {
+ CTVerticalJc va = tcpr.getVAlign();
+ vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
+ }
+ return vAlign;
+ }
+
/**
* add a new paragraph at position of the cursor
* @param cursor
return null;
}
XWPFTableRow tableRow = table.getRow(row);
- if(row == null){
+ if (tableRow == null) {
return null;
}
return tableRow.getTableCell(cell);
--- /dev/null
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.apache.poi.xwpf.usermodel;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.xwpf.usermodel.XWPFTableCell.XWPFVertAlign;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
+
+public class TestXWPFTableCell extends TestCase {
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testSetGetVertAlignment() throws Exception {
+ // instantiate the following classes so they'll get picked up by
+ // the XmlBean process and added to the jar file. they are required
+ // for the following XWPFTableCell methods.
+ CTShd ctShd = CTShd.Factory.newInstance();
+ assertNotNull(ctShd);
+ CTVerticalJc ctVjc = CTVerticalJc.Factory.newInstance();
+ assertNotNull(ctVjc);
+ STShd stShd = STShd.Factory.newInstance();
+ assertNotNull(stShd);
+ STVerticalJc stVjc = STVerticalJc.Factory.newInstance();
+ assertNotNull(stVjc);
+
+ // create a table
+ XWPFDocument doc = new XWPFDocument();
+ CTTbl ctTable = CTTbl.Factory.newInstance();
+ XWPFTable table = new XWPFTable(ctTable, doc);
+ // table has a single row by default; grab it
+ XWPFTableRow tr = table.getRow(0);
+ assertNotNull(tr);
+ // row has a single cell by default; grab it
+ XWPFTableCell cell = tr.getCell(0);
+
+ cell.setVerticalAlignment(XWPFVertAlign.BOTH);
+ XWPFVertAlign al = cell.getVerticalAlignment();
+ assertEquals(XWPFVertAlign.BOTH, al);
+ }
+
+ public void testSetGetColor() throws Exception {
+ // create a table
+ XWPFDocument doc = new XWPFDocument();
+ CTTbl ctTable = CTTbl.Factory.newInstance();
+ XWPFTable table = new XWPFTable(ctTable, doc);
+ // table has a single row by default; grab it
+ XWPFTableRow tr = table.getRow(0);
+ assertNotNull(tr);
+ // row has a single cell by default; grab it
+ XWPFTableCell cell = tr.getCell(0);
+
+ cell.setColor("F0000F");
+ String clr = cell.getColor();
+ assertEquals("F0000F", clr);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+}