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; } } }
/** Gets Cell text by given row and column */ public static String getCellHtmlText( SSheet sheet, int row, int column, FormatResult ft, SCellStyle tbStyle) { // ZSS-1018 final SCell cell = sheet.getCell(row, column); String text = ""; if (cell != null) { boolean wrap = cell.getCellStyle().isWrapText(); if (ft.isRichText()) { final SRichText rstr = ft.getRichText(); text = rstr.getText(); } else { text = ft.getText(); } text = escapeText(text, wrap, true); } return text; }
/** Gets Cell text by given row and column */ public static String getCellHtmlText(SSheet sheet, int row, int column) { final SCell cell = sheet.getCell(row, column); String text = ""; if (cell != null) { boolean wrap = cell.getCellStyle().isWrapText(); final FormatResult ft = EngineFactory.getInstance() .createFormatEngine() .format(cell, new FormatContext(ZssContext.getCurrent().getLocale())); if (ft.isRichText()) { final SRichText rstr = ft.getRichText(); text = rstr.getText(); } else { text = ft.getText(); } text = escapeText(text, wrap, true); } return text; }
@SuppressWarnings("unused") @Test public void hyperlinkModelTest() { SBook book = SBooks.createBook("hyperlink"); SSheet sheet = book.createSheet("link"); SCell cell = sheet.getCell(0, 0); SHyperlink hyperlink = cell.setupHyperlink( SHyperlink.HyperlinkType.URL, "http://www.zkoss.org/download/zkspreadsheet", "Download ZK Spreadsheet"); cell.setStringValue("Go to ZK Spreadsheet Download Page"); SCell cellB4 = sheet.getCell("B4"); SRichText rText = cellB4.setupRichTextValue(); SFont font1 = book.createFont(true); font1.setColor(book.createColor("#0000FF")); font1.setStrikeout(true); rText.addSegment("abc", font1); SFont font2 = book.createFont(true); font2.setColor(book.createColor("#FF0000")); font2.setBoldweight(Boldweight.BOLD); rText.addSegment("123", font2); SFont font3 = book.createFont(true); font3.setColor(book.createColor("#C78548")); font3.setUnderline(Underline.SINGLE); rText.addSegment("xyz", font3); SHyperlink linkB4 = cellB4.setupHyperlink( SHyperlink.HyperlinkType.URL, "http://www.yahoo.com.tw/", "Hyperlink Label B4"); ImExpTestUtil.write(book, ExcelExportFactory.Type.XLSX); }
@Test public void richTextTest() { SBook book = SBooks.createBook("rich"); SSheet sheet = book.createSheet("first"); SCell cell = sheet.getCell(0, 0); SRichText rText = cell.setupRichTextValue(); SFont font1 = book.createFont(true); font1.setColor(book.createColor("#0000FF")); font1.setStrikeout(true); rText.addSegment("abc", font1); SFont font2 = book.createFont(true); font2.setColor(book.createColor("#FF0000")); font2.setBoldweight(Boldweight.BOLD); rText.addSegment("123", font2); SFont font3 = book.createFont(true); font3.setColor(book.createColor("#C78548")); font3.setUnderline(Underline.SINGLE); rText.addSegment("xyz", font3); cell = sheet.getCell(0, 1); rText = cell.setupRichTextValue(); font1 = book.createFont(true); font1.setColor(book.createColor("#FFFF00")); font1.setItalic(true); rText.addSegment("Hello", font1); font2 = book.createFont(true); font2.setColor(book.createColor("#FF33FF")); font2.setBoldweight(Boldweight.BOLD); rText.addSegment("World", font2); font3 = book.createFont(true); font3.setColor(book.createColor("#CCCC99")); font3.setName("HGPSoeiKakupoptai"); rText.addSegment("000", font3); File temp = Setup.getTempFile("pdfExportTest", ".pdf"); exportBook(book, temp); Util.open(temp); }
@Test public void richTextModelTest() { SBook book = SBooks.createBook("rich"); SSheet sheet = book.createSheet("first"); SCell cell = sheet.getCell(0, 0); SRichText rText = cell.setupRichTextValue(); SFont font1 = book.createFont(true); font1.setColor(book.createColor("#0000FF")); font1.setStrikeout(true); rText.addSegment("abc", font1); SFont font2 = book.createFont(true); font2.setColor(book.createColor("#FF0000")); font2.setBoldweight(Boldweight.BOLD); rText.addSegment("123", font2); SFont font3 = book.createFont(true); font3.setColor(book.createColor("#C78548")); font3.setUnderline(Underline.SINGLE); rText.addSegment("xyz", font3); cell = sheet.getCell(0, 1); rText = cell.setupRichTextValue(); font1 = book.createFont(true); font1.setColor(book.createColor("#FFFF00")); font1.setItalic(true); rText.addSegment("Hello", font1); font2 = book.createFont(true); font2.setColor(book.createColor("#FF33FF")); font2.setBoldweight(Boldweight.BOLD); rText.addSegment("World", font2); font3 = book.createFont(true); font3.setColor(book.createColor("#CCCC99")); font3.setName("HGPSoeiKakupoptai"); rText.addSegment("000", font3); ImExpTestUtil.write(book, ExcelExportFactory.Type.XLSX); }
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; }