#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
This commit is contained in:
Nick Burch 2015-10-28 17:42:56 +00:00
parent c65de59909
commit 632228a34e
2 changed files with 47 additions and 10 deletions

View File

@ -222,16 +222,21 @@ public class SXSSFCell implements Cell {
*/ */
public void setCellValue(RichTextString value) public void setCellValue(RichTextString value)
{ {
ensureRichTextStringType(); XSSFRichTextString xvalue = (XSSFRichTextString)value;
if(value.length() > SpreadsheetVersion.EXCEL2007.getMaxTextLength()){
throw new IllegalArgumentException("The maximum length of cell contents (text) is 32,767 characters");
}
((RichTextValue)_value).setValue(value);
if (((XSSFRichTextString)value).hasFormatting()) if (xvalue != null) {
logger.log(POILogger.WARN, "SXSSF doesn't support Shared Strings, rich text formatting information has be lost"); 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);
}
} }
/** /**

View File

@ -767,7 +767,39 @@ public abstract class BaseTestCell {
wb1.close(); 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"), 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()); 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"), assertEquals((wb instanceof HSSFWorkbook ? "row 0, cell 1 _x005fx0046_ with changes" : "row 0, cell 1 _x005fx0046_ with changes"),