diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java index 13cc7f3b7..dd011e367 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java @@ -224,20 +224,23 @@ public class XWPFTableCell implements IBody, ICell { ctshd.setFill(rgbStr); } - /** - * Get the vertical alignment of the cell. - * - * @return the cell alignment enum value - */ - public XWPFVertAlign getVerticalAlignment() { - XWPFVertAlign vAlign = null; - CTTcPr tcpr = ctTc.getTcPr(); - if (tcpr != null) { - CTVerticalJc va = tcpr.getVAlign(); - vAlign = stVertAlignTypeMap.get(va.getVal().intValue()); - } - return vAlign; - } + /** + * Get the vertical alignment of the cell. + * + * @return the cell alignment enum value or null + * if no vertical alignment is set. + */ + public XWPFVertAlign getVerticalAlignment() { + XWPFVertAlign vAlign = null; + CTTcPr tcpr = ctTc.getTcPr(); + if (tcpr != null) { + CTVerticalJc va = tcpr.getVAlign(); + if (va != null && va.getVal() != null) { + vAlign = stVertAlignTypeMap.get(va.getVal().intValue()); + } + } + return vAlign; + } /** * Set the vertical alignment of the cell. diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java index f793742c3..ab2fad84b 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java @@ -19,8 +19,11 @@ package org.apache.poi.xwpf.usermodel; +import java.util.List; + import junit.framework.TestCase; +import org.apache.poi.xwpf.XWPFTestDataSamples; import org.apache.poi.xwpf.usermodel.XWPFTableCell.XWPFVertAlign; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd; @@ -103,4 +106,20 @@ public class TestXWPFTableCell extends TestCase { CTTcBorders tblBorders = tcPr.addNewTcBorders(); CTVMerge vMerge = tcPr.addNewVMerge(); } + + public void testCellVerticalAlign() throws Exception{ + XWPFDocument docx = XWPFTestDataSamples.openSampleDocument("59030.docx"); + List tables = docx.getTables(); + assertEquals(1, tables.size()); + + XWPFTable table = tables.get(0); + + List tableRows = table.getRows(); + assertEquals(2, tableRows.size()); + + assertNull(tableRows.get(0).getCell(0).getVerticalAlignment()); + assertEquals(XWPFVertAlign.BOTTOM, tableRows.get(0).getCell(1).getVerticalAlignment()); + assertEquals(XWPFVertAlign.CENTER, tableRows.get(1).getCell(0).getVerticalAlignment()); + assertNull(tableRows.get(1).getCell(1).getVerticalAlignment()); + } } diff --git a/test-data/document/59030.docx b/test-data/document/59030.docx new file mode 100644 index 000000000..cf40dd221 Binary files /dev/null and b/test-data/document/59030.docx differ