diff options
author | Nick Burch <nick@apache.org> | 2015-10-28 17:42:56 +0000 |
---|---|---|
committer | Nick Burch <nick@apache.org> | 2015-10-28 17:42:56 +0000 |
commit | 8f0093e4648f0e9598d26847984eee060535f951 (patch) | |
tree | aaf3542dc8f65fac07ad71a5687e1147be31dec6 | |
parent | 974367ed1d3956415ab85244cbc20dfd47c22283 (diff) | |
download | poi-8f0093e4648f0e9598d26847984eee060535f951.tar.gz poi-8f0093e4648f0e9598d26847984eee060535f951.zip |
#58558 SXSSFCell.setCellValue((RichTextString)null) fixed to work like XSSF and HSSF, with common unit tests to verify this
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1711082 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java | 23 | ||||
-rw-r--r-- | src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java | 34 |
2 files changed, 47 insertions, 10 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java index 3e6dbc5432..2e5e01f217 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java @@ -222,16 +222,21 @@ public class SXSSFCell implements Cell { */ public void setCellValue(RichTextString value) { - ensureRichTextStringType(); - - if(value.length() > SpreadsheetVersion.EXCEL2007.getMaxTextLength()){ - throw new IllegalArgumentException("The maximum length of cell contents (text) is 32,767 characters"); - } - - ((RichTextValue)_value).setValue(value); + XSSFRichTextString xvalue = (XSSFRichTextString)value; - if (((XSSFRichTextString)value).hasFormatting()) - logger.log(POILogger.WARN, "SXSSF doesn't support Shared Strings, rich text formatting information has be lost"); + if (xvalue != null) { + ensureRichTextStringType(); + + if (xvalue.length() > SpreadsheetVersion.EXCEL2007.getMaxTextLength()) { + throw new IllegalArgumentException("The maximum length of cell contents (text) is 32,767 characters"); + } + if (xvalue.hasFormatting()) + logger.log(POILogger.WARN, "SXSSF doesn't support Shared Strings, rich text formatting information has be lost"); + + ((RichTextValue)_value).setValue(xvalue); + } else { + setCellType(CELL_TYPE_BLANK); + } } /** diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java index 20451d6f35..9cdaf3d18d 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java @@ -767,7 +767,39 @@ public abstract class BaseTestCell { wb1.close(); } - private void checkUnicodeValues(Workbook wb) { + /** + * Setting a cell value of a null RichTextString should set + * the cell to Blank, test case for 58558 + */ + @Test + public void testSetCellValueNullRichTextString() throws IOException { + Workbook wb = _testDataProvider.createWorkbook(); + Sheet sheet = wb.createSheet(); + Cell cell = sheet.createRow(0).createCell(0); + + RichTextString nullStr = null; + cell.setCellValue(nullStr); + assertEquals("", cell.getStringCellValue()); + assertEquals(Cell.CELL_TYPE_BLANK, cell.getCellType()); + + cell = sheet.createRow(0).createCell(1); + cell.setCellValue(1.2d); + assertEquals(Cell.CELL_TYPE_NUMERIC, cell.getCellType()); + cell.setCellValue(nullStr); + assertEquals("", cell.getStringCellValue()); + assertEquals(Cell.CELL_TYPE_BLANK, cell.getCellType()); + + cell = sheet.createRow(0).createCell(1); + cell.setCellValue(wb.getCreationHelper().createRichTextString("Test")); + assertEquals(Cell.CELL_TYPE_STRING, cell.getCellType()); + cell.setCellValue(nullStr); + assertEquals("", cell.getStringCellValue()); + assertEquals(Cell.CELL_TYPE_BLANK, cell.getCellType()); + + wb.close(); + } + + private void checkUnicodeValues(Workbook wb) { assertEquals((wb instanceof HSSFWorkbook ? "row 0, cell 0 _x0046_ without changes" : "row 0, cell 0 F without changes"), wb.getSheetAt(0).getRow(0).getCell(0).toString()); assertEquals((wb instanceof HSSFWorkbook ? "row 0, cell 1 _x005fx0046_ with changes" : "row 0, cell 1 _x005fx0046_ with changes"), |