Bug 56511: Add a null-check to ensure that the run actually has a font to not cause a NullPointerException but rather return null as documented
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1647308 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
645d2083bf
commit
03f846c695
@ -346,7 +346,7 @@ public class XSSFRichTextString implements RichTextString {
|
||||
|
||||
for(int i = 0; i < st.sizeOfRArray(); i++){
|
||||
CTRElt r = st.getRArray(i);
|
||||
if(i == index) {
|
||||
if(i == index && r.getRPr() != null) {
|
||||
XSSFFont fnt = new XSSFFont(toCTFont(r.getRPr()));
|
||||
fnt.setThemesTable(getThemesTable());
|
||||
return fnt;
|
||||
|
@ -22,6 +22,10 @@ import java.util.TreeMap;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.xssf.XSSFTestDataSamples;
|
||||
import org.junit.Test;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRPrElt;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STXstring;
|
||||
@ -357,4 +361,57 @@ public final class TestXSSFRichTextString extends TestCase {
|
||||
assertEquals("<xml-fragment>New Line</xml-fragment>", t2.xmlText());
|
||||
assertEquals("<xml-fragment xml:space=\"preserve\">\n\n</xml-fragment>", t3.xmlText());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testBug56511() {
|
||||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56511.xlsx");
|
||||
for (XSSFSheet sheet : wb) {
|
||||
int lastRow = sheet.getLastRowNum();
|
||||
for (int rowIdx = sheet.getFirstRowNum(); rowIdx <= lastRow; rowIdx++) {
|
||||
XSSFRow row = sheet.getRow(rowIdx);
|
||||
if(row != null) {
|
||||
int lastCell = row.getLastCellNum();
|
||||
|
||||
for (int cellIdx = row.getFirstCellNum(); cellIdx <= lastCell; cellIdx++) {
|
||||
|
||||
XSSFCell cell = row.getCell(cellIdx);
|
||||
if (cell != null) {
|
||||
//System.out.println("row " + rowIdx + " column " + cellIdx + ": " + cell.getCellType() + ": " + cell.toString());
|
||||
|
||||
XSSFRichTextString richText = cell.getRichStringCellValue();
|
||||
int anzFormattingRuns = richText.numFormattingRuns();
|
||||
for (int run = 0; run < anzFormattingRuns; run++) {
|
||||
/*XSSFFont font =*/ richText.getFontOfFormattingRun(run);
|
||||
//System.out.println(" run " + run
|
||||
// + " font " + (font == null ? "<null>" : font.getFontName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBug56511_values() {
|
||||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56511.xlsx");
|
||||
Sheet sheet = wb.getSheetAt(0);
|
||||
Row row = sheet.getRow(0);
|
||||
|
||||
// verify the values to ensure future changes keep the returned information equal
|
||||
assertEquals(0, row.getCell(0).getRichStringCellValue().numFormattingRuns());
|
||||
assertEquals(0, row.getCell(1).getRichStringCellValue().numFormattingRuns());
|
||||
|
||||
XSSFRichTextString rt = (XSSFRichTextString) row.getCell(2).getRichStringCellValue();
|
||||
assertEquals(2, rt.numFormattingRuns());
|
||||
assertNotNull(rt.getFontOfFormattingRun(0));
|
||||
assertNotNull(rt.getFontOfFormattingRun(1));
|
||||
|
||||
rt = (XSSFRichTextString) row.getCell(3).getRichStringCellValue();
|
||||
assertEquals(3, rt.numFormattingRuns());
|
||||
assertNull(rt.getFontOfFormattingRun(0));
|
||||
assertNotNull(rt.getFontOfFormattingRun(1));
|
||||
assertNotNull(rt.getFontOfFormattingRun(2));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user