Bug 55668: Try to avoid NullPointerException when chaning cell type and formula leads to null-string by seting the cell to BLANK instead

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1734861 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2016-03-13 21:30:18 +00:00
parent 61a7e000fe
commit 2776cf6a59
3 changed files with 37 additions and 6 deletions

View File

@ -346,11 +346,18 @@ public class HSSFCell implements Cell {
}
if (setValue) {
String str = convertCellValueToString();
int sstIndex = _book.getWorkbook().addSSTString(new UnicodeString(str));
lrec.setSSTIndex(sstIndex);
UnicodeString us = _book.getWorkbook().getSSTString(sstIndex);
_stringValue = new HSSFRichTextString();
_stringValue.setUnicodeString(us);
if(str == null) {
// bug 55668: don't try to store null-string when formula
// results in empty/null value
setCellType(CELL_TYPE_BLANK, false, row, col, styleIndex);
return;
} else {
int sstIndex = _book.getWorkbook().addSSTString(new UnicodeString(str));
lrec.setSSTIndex(sstIndex);
UnicodeString us = _book.getWorkbook().getSSTString(sstIndex);
_stringValue = new HSSFRichTextString();
_stringValue.setUnicodeString(us);
}
}
_record = lrec;
break;
@ -884,7 +891,7 @@ public class HSSFCell implements Cell {
* the HSSFWorkbook.</p>
*
* <p>To change the style of a cell without affecting other cells that use the same style,
* use {@link org.apache.poi.ss.util.CellUtil#setCellStyleProperties(org.apache.poi.ss.usermodel.Cell, Map)}</p>
* use {@link org.apache.poi.ss.util.CellUtil#setCellStyleProperties(org.apache.poi.ss.usermodel.Cell, java.util.Map)}</p>
*
* @param style reference contained in the workbook
* @see org.apache.poi.hssf.usermodel.HSSFWorkbook#createCellStyle()

View File

@ -2977,4 +2977,28 @@ public final class TestBugs extends BaseTestBugzillaIssues {
wb.close();
}
@Test
public void test55668() throws IOException {
Workbook wb = HSSFTestDataSamples.openSampleWorkbook("55668.xls");
Sheet sheet = wb.getSheetAt(0);
Row row = sheet.getRow(0);
Cell cell = row.getCell(0);
assertEquals(Cell.CELL_TYPE_FORMULA, cell.getCellType());
assertEquals("IF(TRUE,\"\",\"\")", cell.getCellFormula());
assertEquals("", cell.getStringCellValue());
cell.setCellType(Cell.CELL_TYPE_STRING);
assertEquals(Cell.CELL_TYPE_BLANK, cell.getCellType());
try {
assertNull(cell.getCellFormula());
fail("Should throw an exception here");
} catch (IllegalStateException e) {
// expected here
}
assertEquals("", cell.getStringCellValue());
wb.close();
}
}

Binary file not shown.