aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/java/org/apache/poi/hssf/usermodel/HSSFCell.java19
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java24
-rw-r--r--test-data/spreadsheet/55668.xlsbin0 -> 23040 bytes
3 files changed, 37 insertions, 6 deletions
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
index 407f15b47e..e31f2f5808 100644
--- a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
+++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
@@ -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()
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
index 078008a899..7cc9b4ea59 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
@@ -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();
+ }
}
diff --git a/test-data/spreadsheet/55668.xls b/test-data/spreadsheet/55668.xls
new file mode 100644
index 0000000000..8aa8f50427
--- /dev/null
+++ b/test-data/spreadsheet/55668.xls
Binary files differ