Bug 55658: don't fail in SXSSF if a numeric cell is overwritten with a string
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1532873 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9d98d6e309
commit
3b4538cfb4
@ -22,9 +22,17 @@ import java.text.SimpleDateFormat;
|
|||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
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.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.CellRangeAddress;
|
||||||
import org.apache.poi.ss.util.CellReference;
|
import org.apache.poi.ss.util.CellReference;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFHyperlink;
|
import org.apache.poi.xssf.usermodel.XSSFHyperlink;
|
||||||
@ -611,6 +619,7 @@ public class SXSSFCell implements Cell
|
|||||||
* Errors are displayed as #ERR<errIdx>
|
* Errors are displayed as #ERR<errIdx>
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
switch (getCellType()) {
|
switch (getCellType()) {
|
||||||
case CELL_TYPE_BLANK:
|
case CELL_TYPE_BLANK:
|
||||||
@ -887,6 +896,7 @@ public class SXSSFCell implements Cell
|
|||||||
case CELL_TYPE_STRING:
|
case CELL_TYPE_STRING:
|
||||||
return getStringCellValue();
|
return getStringCellValue();
|
||||||
case CELL_TYPE_NUMERIC:
|
case CELL_TYPE_NUMERIC:
|
||||||
|
return Double.toString( getNumericCellValue() );
|
||||||
case CELL_TYPE_ERROR:
|
case CELL_TYPE_ERROR:
|
||||||
byte errVal = getErrorCellValue();
|
byte errVal = getErrorCellValue();
|
||||||
return FormulaError.forInt(errVal).getString();
|
return FormulaError.forInt(errVal).getString();
|
||||||
@ -925,6 +935,7 @@ public class SXSSFCell implements Cell
|
|||||||
{
|
{
|
||||||
super(value);
|
super(value);
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
public int getType()
|
public int getType()
|
||||||
{
|
{
|
||||||
return COMMENT;
|
return COMMENT;
|
||||||
@ -936,6 +947,7 @@ public class SXSSFCell implements Cell
|
|||||||
{
|
{
|
||||||
super(value);
|
super(value);
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
public int getType()
|
public int getType()
|
||||||
{
|
{
|
||||||
return HYPERLINK;
|
return HYPERLINK;
|
||||||
@ -981,6 +993,7 @@ public class SXSSFCell implements Cell
|
|||||||
{
|
{
|
||||||
return _value;
|
return _value;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
boolean isRichText()
|
boolean isRichText()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -989,6 +1002,7 @@ public class SXSSFCell implements Cell
|
|||||||
static class RichTextValue extends StringValue
|
static class RichTextValue extends StringValue
|
||||||
{
|
{
|
||||||
RichTextString _value;
|
RichTextString _value;
|
||||||
|
@Override
|
||||||
public int getType()
|
public int getType()
|
||||||
{
|
{
|
||||||
return CELL_TYPE_STRING;
|
return CELL_TYPE_STRING;
|
||||||
@ -1001,6 +1015,7 @@ public class SXSSFCell implements Cell
|
|||||||
{
|
{
|
||||||
return _value;
|
return _value;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
boolean isRichText()
|
boolean isRichText()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@ -1026,6 +1041,7 @@ public class SXSSFCell implements Cell
|
|||||||
static class NumericFormulaValue extends FormulaValue
|
static class NumericFormulaValue extends FormulaValue
|
||||||
{
|
{
|
||||||
double _preEvaluatedValue;
|
double _preEvaluatedValue;
|
||||||
|
@Override
|
||||||
int getFormulaType()
|
int getFormulaType()
|
||||||
{
|
{
|
||||||
return CELL_TYPE_NUMERIC;
|
return CELL_TYPE_NUMERIC;
|
||||||
@ -1042,6 +1058,7 @@ public class SXSSFCell implements Cell
|
|||||||
static class StringFormulaValue extends FormulaValue
|
static class StringFormulaValue extends FormulaValue
|
||||||
{
|
{
|
||||||
String _preEvaluatedValue;
|
String _preEvaluatedValue;
|
||||||
|
@Override
|
||||||
int getFormulaType()
|
int getFormulaType()
|
||||||
{
|
{
|
||||||
return CELL_TYPE_STRING;
|
return CELL_TYPE_STRING;
|
||||||
@ -1058,6 +1075,7 @@ public class SXSSFCell implements Cell
|
|||||||
static class BooleanFormulaValue extends FormulaValue
|
static class BooleanFormulaValue extends FormulaValue
|
||||||
{
|
{
|
||||||
boolean _preEvaluatedValue;
|
boolean _preEvaluatedValue;
|
||||||
|
@Override
|
||||||
int getFormulaType()
|
int getFormulaType()
|
||||||
{
|
{
|
||||||
return CELL_TYPE_BOOLEAN;
|
return CELL_TYPE_BOOLEAN;
|
||||||
@ -1074,6 +1092,7 @@ public class SXSSFCell implements Cell
|
|||||||
static class ErrorFormulaValue extends FormulaValue
|
static class ErrorFormulaValue extends FormulaValue
|
||||||
{
|
{
|
||||||
byte _preEvaluatedValue;
|
byte _preEvaluatedValue;
|
||||||
|
@Override
|
||||||
int getFormulaType()
|
int getFormulaType()
|
||||||
{
|
{
|
||||||
return CELL_TYPE_ERROR;
|
return CELL_TYPE_ERROR;
|
||||||
|
@ -19,7 +19,15 @@
|
|||||||
|
|
||||||
package org.apache.poi.xssf.streaming;
|
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.SXSSFITestDataProvider;
|
||||||
import org.apache.poi.xssf.XSSFITestDataProvider;
|
import org.apache.poi.xssf.XSSFITestDataProvider;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFCell;
|
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.apache.xmlbeans.XmlCursor;
|
||||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
|
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);
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user