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
2718aa2f51
commit
0a5dcbec1b
@ -346,12 +346,19 @@ public class HSSFCell implements Cell {
|
|||||||
}
|
}
|
||||||
if (setValue) {
|
if (setValue) {
|
||||||
String str = convertCellValueToString();
|
String str = convertCellValueToString();
|
||||||
|
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));
|
int sstIndex = _book.getWorkbook().addSSTString(new UnicodeString(str));
|
||||||
lrec.setSSTIndex(sstIndex);
|
lrec.setSSTIndex(sstIndex);
|
||||||
UnicodeString us = _book.getWorkbook().getSSTString(sstIndex);
|
UnicodeString us = _book.getWorkbook().getSSTString(sstIndex);
|
||||||
_stringValue = new HSSFRichTextString();
|
_stringValue = new HSSFRichTextString();
|
||||||
_stringValue.setUnicodeString(us);
|
_stringValue.setUnicodeString(us);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
_record = lrec;
|
_record = lrec;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -884,7 +891,7 @@ public class HSSFCell implements Cell {
|
|||||||
* the HSSFWorkbook.</p>
|
* the HSSFWorkbook.</p>
|
||||||
*
|
*
|
||||||
* <p>To change the style of a cell without affecting other cells that use the same style,
|
* <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
|
* @param style reference contained in the workbook
|
||||||
* @see org.apache.poi.hssf.usermodel.HSSFWorkbook#createCellStyle()
|
* @see org.apache.poi.hssf.usermodel.HSSFWorkbook#createCellStyle()
|
||||||
|
@ -2977,4 +2977,28 @@ public final class TestBugs extends BaseTestBugzillaIssues {
|
|||||||
|
|
||||||
wb.close();
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
BIN
test-data/spreadsheet/55668.xls
Normal file
BIN
test-data/spreadsheet/55668.xls
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user