]> source.dussan.org Git - poi.git/commitdiff
Bug 55658: don't fail in SXSSF if a numeric cell is overwritten with a string
authorDominik Stadler <centic@apache.org>
Wed, 16 Oct 2013 19:47:21 +0000 (19:47 +0000)
committerDominik Stadler <centic@apache.org>
Wed, 16 Oct 2013 19:47:21 +0000 (19:47 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1532873 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java
src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java

index 46ca95fcf771ca27e57b9f4628d79ea0d0900299..125dfac254574d360c230e2780e1166839acd0ef 100644 (file)
@@ -22,9 +22,17 @@ import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 
-import org.apache.poi.ss.formula.eval.ErrorEval;
-import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.formula.FormulaParseException;
+import org.apache.poi.ss.formula.eval.ErrorEval;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Comment;
+import org.apache.poi.ss.usermodel.DateUtil;
+import org.apache.poi.ss.usermodel.FormulaError;
+import org.apache.poi.ss.usermodel.Hyperlink;
+import org.apache.poi.ss.usermodel.RichTextString;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.ss.util.CellReference;
 import org.apache.poi.xssf.usermodel.XSSFHyperlink;
@@ -611,6 +619,7 @@ public class SXSSFCell implements Cell
      * Errors are displayed as #ERR&lt;errIdx&gt;
      * </p>
      */
+    @Override
     public String toString() {
         switch (getCellType()) {
             case CELL_TYPE_BLANK:
@@ -887,6 +896,7 @@ public class SXSSFCell implements Cell
             case CELL_TYPE_STRING:
                 return getStringCellValue();
             case CELL_TYPE_NUMERIC:
+               return Double.toString( getNumericCellValue() );
             case CELL_TYPE_ERROR:
                 byte errVal = getErrorCellValue();
                 return FormulaError.forInt(errVal).getString();
@@ -925,6 +935,7 @@ public class SXSSFCell implements Cell
         {
             super(value);
         }
+        @Override
         public int getType()
         {
             return COMMENT;
@@ -936,6 +947,7 @@ public class SXSSFCell implements Cell
         {
             super(value);
         }
+        @Override
         public int getType()
         {
             return HYPERLINK;
@@ -981,6 +993,7 @@ public class SXSSFCell implements Cell
         {
             return _value;
         }
+        @Override
         boolean isRichText()
         {
             return false;
@@ -989,6 +1002,7 @@ public class SXSSFCell implements Cell
     static class RichTextValue extends StringValue
     {
         RichTextString _value;
+        @Override
         public int getType()
         {
             return CELL_TYPE_STRING;
@@ -1001,6 +1015,7 @@ public class SXSSFCell implements Cell
         {
             return _value;
         }
+        @Override
         boolean isRichText()
         {
             return true;
@@ -1026,6 +1041,7 @@ public class SXSSFCell implements Cell
     static class NumericFormulaValue extends FormulaValue
     {
         double _preEvaluatedValue;
+        @Override
         int getFormulaType()
         {
             return CELL_TYPE_NUMERIC;
@@ -1042,6 +1058,7 @@ public class SXSSFCell implements Cell
     static class StringFormulaValue extends FormulaValue
     {
         String _preEvaluatedValue;
+        @Override
         int getFormulaType()
         {
             return CELL_TYPE_STRING;
@@ -1058,6 +1075,7 @@ public class SXSSFCell implements Cell
     static class BooleanFormulaValue extends FormulaValue
     {
         boolean _preEvaluatedValue;
+        @Override
         int getFormulaType()
         {
             return CELL_TYPE_BOOLEAN;
@@ -1074,6 +1092,7 @@ public class SXSSFCell implements Cell
     static class ErrorFormulaValue extends FormulaValue
     {
         byte _preEvaluatedValue;
+        @Override
         int getFormulaType()
         {
             return CELL_TYPE_ERROR;
index fb45b73bf02ffbac8b6209ce4a38de5b23264e54..a73e952c8fa61a803123519482d64189a19dee8f 100644 (file)
 
 package org.apache.poi.xssf.streaming;
 
-import org.apache.poi.ss.usermodel.*;
+import java.io.IOException;
+
+import javax.xml.namespace.QName;
+
+import org.apache.poi.ss.usermodel.BaseTestCell;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.SXSSFITestDataProvider;
 import org.apache.poi.xssf.XSSFITestDataProvider;
 import org.apache.poi.xssf.usermodel.XSSFCell;
@@ -27,10 +35,6 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.apache.xmlbeans.XmlCursor;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
 
-import javax.xml.namespace.QName;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
 /**
  *
  */
@@ -144,4 +148,24 @@ public class TestSXSSFCell extends BaseTestCell {
             assertEquals("expected xml:spaces=\"preserve\" \"" + str + "\"", "preserve", t);
         }
     }
+
+    public void testBug55658SetNumericValue(){
+        Workbook wb = new SXSSFWorkbook();
+        Sheet sh = wb.createSheet();
+        Row row = sh.createRow(0);
+        Cell cell = row.createCell(0);
+        cell.setCellValue(Integer.valueOf(23));
+        
+        cell.setCellValue("some");
+
+        cell = row.createCell(1);
+        cell.setCellValue(Integer.valueOf(23));
+        
+        cell.setCellValue("24");
+
+        wb = _testDataProvider.writeOutAndReadBack(wb);
+
+        assertEquals("some", wb.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());
+        assertEquals("24", wb.getSheetAt(0).getRow(0).getCell(1).getStringCellValue());
+    }
 }