}
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;
* 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()
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();
+ }
}