From: Nick Burch Date: Wed, 28 Oct 2015 17:42:56 +0000 (+0000) Subject: #58558 SXSSFCell.setCellValue((RichTextString)null) fixed to work like XSSF and HSSF... X-Git-Tag: REL_3_14_BETA1~214 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8f0093e4648f0e9598d26847984eee060535f951;p=poi.git #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 --- 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"),