Fix for #56702 - If a cell is of type numeric but has an empty <v/> tag, return as 0
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1610482 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b9ff74b050
commit
696b9d6406
@ -206,8 +206,10 @@ public final class XSSFCell implements Cell {
|
|||||||
case CELL_TYPE_FORMULA:
|
case CELL_TYPE_FORMULA:
|
||||||
case CELL_TYPE_NUMERIC:
|
case CELL_TYPE_NUMERIC:
|
||||||
if(_cell.isSetV()) {
|
if(_cell.isSetV()) {
|
||||||
|
String v = _cell.getV();
|
||||||
|
if (v.isEmpty()) return 0.0;
|
||||||
try {
|
try {
|
||||||
return Double.parseDouble(_cell.getV());
|
return Double.parseDouble(v);
|
||||||
} catch(NumberFormatException e) {
|
} catch(NumberFormatException e) {
|
||||||
throw typeMismatch(CELL_TYPE_NUMERIC, CELL_TYPE_STRING, false);
|
throw typeMismatch(CELL_TYPE_NUMERIC, CELL_TYPE_STRING, false);
|
||||||
}
|
}
|
||||||
|
@ -1628,6 +1628,31 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
|
|||||||
saveAndReloadReport(wb, xlsOutput);
|
saveAndReloadReport(wb, xlsOutput);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XSSFCell.typeMismatch on certain blank cells when formatting
|
||||||
|
* with DataFormatter
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void bug56702() throws Exception {
|
||||||
|
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56702.xlsx");
|
||||||
|
|
||||||
|
Sheet sheet = wb.getSheetAt(0);
|
||||||
|
|
||||||
|
// Get wrong cell by row 8 & column 7
|
||||||
|
Cell cell = sheet.getRow(8).getCell(7);
|
||||||
|
assertEquals(Cell.CELL_TYPE_NUMERIC, cell.getCellType());
|
||||||
|
|
||||||
|
// Check the value - will be zero as it is <c><v/></c>
|
||||||
|
assertEquals(0.0, cell.getNumericCellValue(), 0.001);
|
||||||
|
|
||||||
|
// Try to format
|
||||||
|
DataFormatter formatter = new DataFormatter();
|
||||||
|
formatter.formatCellValue(cell);
|
||||||
|
|
||||||
|
// Check the formatting
|
||||||
|
assertEquals("0", formatter.formatCellValue(cell));
|
||||||
|
}
|
||||||
|
|
||||||
private void saveAndReloadReport(Workbook wb, File outFile) throws IOException {
|
private void saveAndReloadReport(Workbook wb, File outFile) throws IOException {
|
||||||
// run some method on the font to verify if it is "disconnected" already
|
// run some method on the font to verify if it is "disconnected" already
|
||||||
//for(short i = 0;i < 256;i++)
|
//for(short i = 0;i < 256;i++)
|
||||||
|
BIN
test-data/spreadsheet/56702.xlsx
Normal file
BIN
test-data/spreadsheet/56702.xlsx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user