#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:
parent
c65de59909
commit
632228a34e
@ -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()){
|
if (xvalue != null) {
|
||||||
throw new IllegalArgumentException("The maximum length of cell contents (text) is 32,767 characters");
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
((RichTextValue)_value).setValue(value);
|
|
||||||
|
|
||||||
if (((XSSFRichTextString)value).hasFormatting())
|
|
||||||
logger.log(POILogger.WARN, "SXSSF doesn't support Shared Strings, rich text formatting information has be lost");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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"),
|
||||||
|
Loading…
Reference in New Issue
Block a user