]> source.dussan.org Git - poi.git/commitdiff
Bug 62307: made Cell#getNumericCellValue() behavior consistent across HSSF/XSSF/SXSSF...
authorVladislav Galas <gallon@apache.org>
Wed, 2 Jan 2019 20:45:52 +0000 (20:45 +0000)
committerVladislav Galas <gallon@apache.org>
Wed, 2 Jan 2019 20:45:52 +0000 (20:45 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1850207 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java

index a9490694c05856c64154c88885bb093551f4752a..a1a66bf6532501476be775cd2831f590cc68b60e 100644 (file)
@@ -285,12 +285,10 @@ public final class XSSFCell implements Cell {
      */
     @Override
     public double getNumericCellValue() {
-        CellType cellType = getCellType();
-        switch(cellType) {
+        CellType valueType = isFormulaCell() ? getCachedFormulaResultType() : getCellType();
+        switch(valueType) {
             case BLANK:
                 return 0.0;
-            case FORMULA:
-                // fall-through
             case NUMERIC:
                 if(_cell.isSetV()) {
                    String v = _cell.getV();
@@ -305,8 +303,10 @@ public final class XSSFCell implements Cell {
                 } else {
                    return 0.0;
                 }
+            case FORMULA:
+                throw new AssertionError();
             default:
-                throw typeMismatch(CellType.NUMERIC, cellType, false);
+                throw typeMismatch(CellType.NUMERIC, valueType, false);
         }
     }
 
@@ -1361,4 +1361,4 @@ public final class XSSFCell implements Cell {
     }
         
 }
-    
\ No newline at end of file
+    
index 304faaadaf39ada4b202b7f8297c630a3a982c18..fb8f81b065486c84ab5bb6df19c505648182f770 100644 (file)
@@ -74,7 +74,7 @@ public abstract class BaseTestCell {
         assertEquals(CellType.BOOLEAN, cell.getCellType());
         cell.setCellValue(true);
         assertTrue(cell.getBooleanCellValue());
-        assertProhibitedValueAccess(cell, CellType.NUMERIC, CellType.STRING,
+        assertProhibitedValueAccess(cell, CellType.NUMERIC, CellType.STRING, CellType.BOOLEAN,
                 CellType.FORMULA, CellType.ERROR);
 
         cell.setCellValue(factory.createRichTextString("Foo"));
@@ -1133,4 +1133,11 @@ public abstract class BaseTestCell {
             assertEquals(CellType.FORMULA, cell.getCellType());
         }
     }
+
+    @Test
+    public void testGetNumericCellValueOnABlankCellReturnsZero() {
+        Cell cell = _testDataProvider.createWorkbook().createSheet().createRow(0).createCell(0);
+        assertEquals(CellType.BLANK, cell.getCellType());
+        assertEquals(0, cell.getNumericCellValue(), 0);
+    }
 }