Avoid NPE in XWPFTableCell, taken from https://github.com/prasad-babu/poi/tree/WORKING_BRANCH
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1746625 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ee6c0625d0
commit
6b6aa56455
@ -163,7 +163,7 @@ public class XWPFTableCell implements IBody, ICell {
|
|||||||
/**
|
/**
|
||||||
* removes a paragraph of this tablecell
|
* removes a paragraph of this tablecell
|
||||||
*
|
*
|
||||||
* @param pos
|
* @param pos The position in the list of paragraphs, 0-based
|
||||||
*/
|
*/
|
||||||
public void removeParagraph(int pos) {
|
public void removeParagraph(int pos) {
|
||||||
paragraphs.remove(pos);
|
paragraphs.remove(pos);
|
||||||
@ -234,6 +234,11 @@ public class XWPFTableCell implements IBody, ICell {
|
|||||||
CTTcPr tcpr = ctTc.getTcPr();
|
CTTcPr tcpr = ctTc.getTcPr();
|
||||||
if (tcpr != null) {
|
if (tcpr != null) {
|
||||||
CTVerticalJc va = tcpr.getVAlign();
|
CTVerticalJc va = tcpr.getVAlign();
|
||||||
|
if(va != null) {
|
||||||
|
vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
|
||||||
|
} else {
|
||||||
|
vAlign = XWPFVertAlign.TOP;
|
||||||
|
}
|
||||||
if (va != null && va.getVal() != null) {
|
if (va != null && va.getVal() != null) {
|
||||||
vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
|
vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
|
||||||
}
|
}
|
||||||
@ -255,7 +260,7 @@ public class XWPFTableCell implements IBody, ICell {
|
|||||||
/**
|
/**
|
||||||
* add a new paragraph at position of the cursor
|
* add a new paragraph at position of the cursor
|
||||||
*
|
*
|
||||||
* @param cursor
|
* @param cursor The XmlCursor structure created with XmlBeans
|
||||||
* @return the inserted paragraph
|
* @return the inserted paragraph
|
||||||
*/
|
*/
|
||||||
public XWPFParagraph insertNewParagraph(final XmlCursor cursor) {
|
public XWPFParagraph insertNewParagraph(final XmlCursor cursor) {
|
||||||
@ -417,7 +422,7 @@ public class XWPFTableCell implements IBody, ICell {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getText() {
|
public String getText() {
|
||||||
StringBuffer text = new StringBuffer();
|
StringBuilder text = new StringBuilder();
|
||||||
for (XWPFParagraph p : paragraphs) {
|
for (XWPFParagraph p : paragraphs) {
|
||||||
text.append(p.getText());
|
text.append(p.getText());
|
||||||
}
|
}
|
||||||
@ -437,7 +442,7 @@ public class XWPFTableCell implements IBody, ICell {
|
|||||||
|
|
||||||
StringBuffer text = new StringBuffer();
|
StringBuffer text = new StringBuffer();
|
||||||
for (int i = 0; i < bodyElements.size(); i++) {
|
for (int i = 0; i < bodyElements.size(); i++) {
|
||||||
boolean isLast = (i == bodyElements.size() - 1) ? true : false;
|
boolean isLast = (i == bodyElements.size() - 1);
|
||||||
appendBodyElementText(text, bodyElements.get(i), isLast);
|
appendBodyElementText(text, bodyElements.get(i), isLast);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -447,7 +452,7 @@ public class XWPFTableCell implements IBody, ICell {
|
|||||||
private void appendBodyElementText(StringBuffer text, IBodyElement e, boolean isLast) {
|
private void appendBodyElementText(StringBuffer text, IBodyElement e, boolean isLast) {
|
||||||
if (e instanceof XWPFParagraph) {
|
if (e instanceof XWPFParagraph) {
|
||||||
text.append(((XWPFParagraph) e).getText());
|
text.append(((XWPFParagraph) e).getText());
|
||||||
if (isLast == false) {
|
if (!isLast) {
|
||||||
text.append('\t');
|
text.append('\t');
|
||||||
}
|
}
|
||||||
} else if (e instanceof XWPFTable) {
|
} else if (e instanceof XWPFTable) {
|
||||||
@ -456,18 +461,18 @@ public class XWPFTableCell implements IBody, ICell {
|
|||||||
for (XWPFTableCell cell : row.getTableCells()) {
|
for (XWPFTableCell cell : row.getTableCells()) {
|
||||||
List<IBodyElement> localBodyElements = cell.getBodyElements();
|
List<IBodyElement> localBodyElements = cell.getBodyElements();
|
||||||
for (int i = 0; i < localBodyElements.size(); i++) {
|
for (int i = 0; i < localBodyElements.size(); i++) {
|
||||||
boolean localIsLast = (i == localBodyElements.size() - 1) ? true : false;
|
boolean localIsLast = (i == localBodyElements.size() - 1);
|
||||||
appendBodyElementText(text, localBodyElements.get(i), localIsLast);
|
appendBodyElementText(text, localBodyElements.get(i), localIsLast);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isLast == false) {
|
if (!isLast) {
|
||||||
text.append('\n');
|
text.append('\n');
|
||||||
}
|
}
|
||||||
} else if (e instanceof XWPFSDT) {
|
} else if (e instanceof XWPFSDT) {
|
||||||
text.append(((XWPFSDT) e).getContent().getText());
|
text.append(((XWPFSDT) e).getContent().getText());
|
||||||
if (isLast == false) {
|
if (!isLast) {
|
||||||
text.append('\t');
|
text.append('\t');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -507,7 +512,7 @@ public class XWPFTableCell implements IBody, ICell {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create a map from this XWPF-level enum to the STVerticalJc.Enum values
|
// Create a map from this XWPF-level enum to the STVerticalJc.Enum values
|
||||||
public static enum XWPFVertAlign {
|
public enum XWPFVertAlign {
|
||||||
TOP, CENTER, BOTH, BOTTOM
|
TOP, CENTER, BOTH, BOTTOM
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,23 +19,12 @@
|
|||||||
|
|
||||||
package org.apache.poi.xwpf.usermodel;
|
package org.apache.poi.xwpf.usermodel;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.poi.xwpf.XWPFTestDataSamples;
|
import org.apache.poi.xwpf.XWPFTestDataSamples;
|
||||||
import org.apache.poi.xwpf.usermodel.XWPFTableCell.XWPFVertAlign;
|
import org.apache.poi.xwpf.usermodel.XWPFTableCell.XWPFVertAlign;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHMerge;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
|
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
|
import java.util.List;
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
|
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcBorders;
|
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
|
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge;
|
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc;
|
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
|
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
|
|
||||||
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
|
|
||||||
|
|
||||||
public class TestXWPFTableCell extends TestCase {
|
public class TestXWPFTableCell extends TestCase {
|
||||||
@Override
|
@Override
|
||||||
@ -117,9 +106,23 @@ public class TestXWPFTableCell extends TestCase {
|
|||||||
List<XWPFTableRow> tableRows = table.getRows();
|
List<XWPFTableRow> tableRows = table.getRows();
|
||||||
assertEquals(2, tableRows.size());
|
assertEquals(2, tableRows.size());
|
||||||
|
|
||||||
assertNull(tableRows.get(0).getCell(0).getVerticalAlignment());
|
assertEquals(XWPFVertAlign.TOP, tableRows.get(0).getCell(0).getVerticalAlignment());
|
||||||
assertEquals(XWPFVertAlign.BOTTOM, tableRows.get(0).getCell(1).getVerticalAlignment());
|
assertEquals(XWPFVertAlign.BOTTOM, tableRows.get(0).getCell(1).getVerticalAlignment());
|
||||||
assertEquals(XWPFVertAlign.CENTER, tableRows.get(1).getCell(0).getVerticalAlignment());
|
assertEquals(XWPFVertAlign.CENTER, tableRows.get(1).getCell(0).getVerticalAlignment());
|
||||||
assertNull(tableRows.get(1).getCell(1).getVerticalAlignment());
|
assertEquals(XWPFVertAlign.TOP, tableRows.get(1).getCell(1).getVerticalAlignment());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testCellVerticalAlign2() throws Exception{
|
||||||
|
XWPFDocument docx = XWPFTestDataSamples.openSampleDocument("TestTableCellAlign.docx");
|
||||||
|
List<XWPFTable> tables = docx.getTables();
|
||||||
|
for (XWPFTable table : tables) {
|
||||||
|
List<XWPFTableRow> tableRows = table.getRows();
|
||||||
|
for (XWPFTableRow tableRow : tableRows) {
|
||||||
|
List<XWPFTableCell> tableCells = tableRow.getTableCells();
|
||||||
|
for (XWPFTableCell tableCell : tableCells) {
|
||||||
|
assertNotNull(tableCell.getVerticalAlignment());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BIN
test-data/document/TestTableCellAlign.docx
Normal file
BIN
test-data/document/TestTableCellAlign.docx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user