Browse Source

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
tags/REL_3_15_BETA2
Dominik Stadler 8 years ago
parent
commit
2776cf6a59

+ 13
- 6
src/java/org/apache/poi/hssf/usermodel/HSSFCell.java 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()

+ 24
- 0
src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java 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();
}
}

BIN
test-data/spreadsheet/55668.xls View File


Loading…
Cancel
Save