mirror of https://github.com/apache/poi.git
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:
parent
61a7e000fe
commit
2776cf6a59
|
@ -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()
|
||||
|
|
|
@ -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.
Loading…
Reference in New Issue