protected void importRichText( Cell poiCell, RichTextString poiRichTextString, SRichText richText) { String cellValue = poiRichTextString.getString(); // ZSS-1138 int count = poiRichTextString.numFormattingRuns(); if (count <= 0) { richText.addSegment(cellValue, null); // ZSS-1138: null font means use cell's font } else { // ZSS-1138 int prevFormattingRunIndex = poiRichTextString.getIndexOfFormattingRun(0); if (prevFormattingRunIndex > 0) { final String content = cellValue.substring(0, prevFormattingRunIndex); richText.addSegment(content, null); // ZSS-1138: null font means use cell's font } for (int i = 0; i < count; i++) { int nextFormattingRunIndex = (i + 1) >= poiRichTextString.numFormattingRuns() ? cellValue.length() : poiRichTextString.getIndexOfFormattingRun(i + 1); final String content = cellValue.substring(prevFormattingRunIndex, nextFormattingRunIndex); richText.addSegment( content, toZssFont(getPoiFontFromRichText(workbook, poiCell, poiRichTextString, i))); prevFormattingRunIndex = nextFormattingRunIndex; } } }
/** * Set a string value for the cell. * * @param str value to set the cell to. For formulas we'll set the 'pre-evaluated result string, * for String cells we'll set its value. For other types we will change the cell to a string * cell and set its value. If value is null then we will change the cell to a Blank cell. */ public void setCellValue(RichTextString str) { if (str == null || str.getString() == null) { setCellType(Cell.CELL_TYPE_BLANK); return; } int cellType = getCellType(); switch (cellType) { case Cell.CELL_TYPE_FORMULA: _cell.setV(str.getString()); _cell.setT(STCellType.STR); break; default: if (_cell.getT() == STCellType.INLINE_STR) { // set the 'pre-evaluated result _cell.setV(str.getString()); } else { _cell.setT(STCellType.S); XSSFRichTextString rt = (XSSFRichTextString) str; rt.setStylesTableReference(_stylesSource); int sRef = _sharedStringSource.addEntry(rt.getCTRst()); _cell.setV(Integer.toString(sRef)); } break; } }
protected SCell importCell(Cell poiCell, int row, SSheet sheet) { SCell cell = sheet.getCell(row, poiCell.getColumnIndex()); cell.setCellStyle(importCellStyle(poiCell.getCellStyle())); switch (poiCell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: cell.setNumberValue(poiCell.getNumericCellValue()); break; case Cell.CELL_TYPE_STRING: RichTextString poiRichTextString = poiCell.getRichStringCellValue(); if (poiRichTextString != null && poiRichTextString.numFormattingRuns() > 0) { SRichText richText = cell.setupRichTextValue(); importRichText(poiCell, poiRichTextString, richText); } else { cell.setStringValue(poiCell.getStringCellValue()); } break; case Cell.CELL_TYPE_BOOLEAN: cell.setBooleanValue(poiCell.getBooleanCellValue()); break; case Cell.CELL_TYPE_FORMULA: cell.setFormulaValue(poiCell.getCellFormula()); // ZSS-873 if (isImportCache() && !poiCell.isCalcOnLoad() && !mustCalc(cell)) { ValueEval val = null; switch (poiCell.getCachedFormulaResultType()) { case Cell.CELL_TYPE_NUMERIC: val = new NumberEval(poiCell.getNumericCellValue()); break; case Cell.CELL_TYPE_STRING: RichTextString poiRichTextString0 = poiCell.getRichStringCellValue(); if (poiRichTextString0 != null && poiRichTextString0.numFormattingRuns() > 0) { SRichText richText = new RichTextImpl(); importRichText(poiCell, poiRichTextString0, richText); val = new StringEval(richText.getText()); } else { val = new StringEval(poiCell.getStringCellValue()); } break; case Cell.CELL_TYPE_BOOLEAN: val = BoolEval.valueOf(poiCell.getBooleanCellValue()); break; case Cell.CELL_TYPE_ERROR: val = ErrorEval.valueOf(poiCell.getErrorCellValue()); break; case Cell.CELL_TYPE_BLANK: default: // do nothing } if (val != null) { ((AbstractCellAdv) cell).setFormulaResultValue(val); } } break; case Cell.CELL_TYPE_ERROR: cell.setErrorValue(PoiEnumConversion.toErrorCode(poiCell.getErrorCellValue())); break; case Cell.CELL_TYPE_BLANK: // do nothing because spreadsheet model auto creates blank cells default: // TODO log: leave an unknown cell type as a blank cell. break; } Hyperlink poiHyperlink = poiCell.getHyperlink(); if (poiHyperlink != null) { String addr = poiHyperlink.getAddress(); String label = poiHyperlink.getLabel(); SHyperlink hyperlink = cell.setupHyperlink( PoiEnumConversion.toHyperlinkType(poiHyperlink.getType()), addr == null ? "" : addr, label == null ? "" : label); cell.setHyperlink(hyperlink); } Comment poiComment = poiCell.getCellComment(); if (poiComment != null) { SComment comment = cell.setupComment(); comment.setAuthor(poiComment.getAuthor()); comment.setVisible(poiComment.isVisible()); RichTextString poiRichTextString = poiComment.getString(); if (poiRichTextString != null && poiRichTextString.numFormattingRuns() > 0) { importRichText(poiCell, poiComment.getString(), comment.setupRichText()); } else { comment.setText(poiComment.toString()); } } return cell; }