]> source.dussan.org Git - poi.git/commitdiff
Fix for #56702 - If a cell is of type numeric but has an empty <v/> tag, return as 0
authorNick Burch <nick@apache.org>
Mon, 14 Jul 2014 18:53:39 +0000 (18:53 +0000)
committerNick Burch <nick@apache.org>
Mon, 14 Jul 2014 18:53:39 +0000 (18:53 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1610482 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
test-data/spreadsheet/56702.xlsx [new file with mode: 0644]

index b74cc3b8987d652783db5f451ee82c7fb69d35ff..e12e3e1b752218abfa0de752cbb6867ae3ab1de6 100644 (file)
@@ -206,8 +206,10 @@ public final class XSSFCell implements Cell {
             case CELL_TYPE_FORMULA:
             case CELL_TYPE_NUMERIC:
                 if(_cell.isSetV()) {
+                   String v = _cell.getV();
+                   if (v.isEmpty()) return 0.0;
                    try {
-                      return Double.parseDouble(_cell.getV());
+                      return Double.parseDouble(v);
                    } catch(NumberFormatException e) {
                       throw typeMismatch(CELL_TYPE_NUMERIC, CELL_TYPE_STRING, false);
                    }
index b54da4f28bad46b9069e8f2e7bd57a857a397a0b..93d906f5e300de2431f2176e346e329e1ab74c21 100644 (file)
@@ -1628,6 +1628,31 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
         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 {
         // run some method on the font to verify if it is "disconnected" already
         //for(short i = 0;i < 256;i++)
diff --git a/test-data/spreadsheet/56702.xlsx b/test-data/spreadsheet/56702.xlsx
new file mode 100644 (file)
index 0000000..c17a0bc
Binary files /dev/null and b/test-data/spreadsheet/56702.xlsx differ