mirror of https://github.com/apache/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
This commit is contained in:
parent
974367ed1d
commit
8f0093e464
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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"),
|
||||
|
|
Loading…
Reference in New Issue