Java tutorial
///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.excel; import java.util.Date; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.DateUtil; public class ExportCell { private final Cell poiCell; private final int row; private final int col; private CellFormat cellFormat; private ContentProvider styleProvider; public ExportCell(final ContentProvider styleProvider, final Cell poiCell, final int row, final int col) { this.styleProvider = styleProvider; this.poiCell = poiCell; this.row = row; this.col = col; } /** * @param value * @return this for chaining. */ public ExportCell setValue(final Object value) { return setValue(value, null); } /** * @param value * @param property * @return this for chaining. */ public ExportCell setValue(final Object value, final String property) { styleProvider.setValue(this, value, property); return this; } public double getNumericCellValue() { if (poiCell == null) { return 0.0; } return poiCell.getNumericCellValue(); } public boolean getBooleanCellValue() { if (poiCell == null) { return false; } return poiCell.getBooleanCellValue(); } public String getStringCellValue() { final Object obj = getCellValue(); if (obj == null) { return ""; } else if (obj instanceof String) { return (String) obj; } return String.valueOf(obj); } public Object getCellValue() { if (poiCell == null) { return null; } switch (poiCell.getCellType()) { case Cell.CELL_TYPE_STRING: return poiCell.getRichStringCellValue().getString(); case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(poiCell)) { return poiCell.getDateCellValue(); } return poiCell.getNumericCellValue(); case Cell.CELL_TYPE_BOOLEAN: return poiCell.getBooleanCellValue(); case Cell.CELL_TYPE_FORMULA: return poiCell.getCellFormula(); default: return null; } } public boolean isNumericCellType() { if (poiCell == null) { return false; } return poiCell.getCellType() == Cell.CELL_TYPE_NUMERIC; } public Date getDateCellValue() { if (poiCell == null) { return null; } return poiCell.getDateCellValue(); } public Cell getPoiCell() { return poiCell; } public void setStyleProvider(final ContentProvider styleProvider) { this.styleProvider = styleProvider; } public int getRow() { return row; } public int getCol() { return col; } /** * @param cellFormat * @return this for chaining. */ public ExportCell setCellFormat(final String cellFormat) { this.cellFormat = new CellFormat(cellFormat); return this; } /** * @param cellFormat * @return this for chaining. */ public ExportCell setCellFormat(final CellFormat cellFormat) { this.cellFormat = cellFormat; return this; } public CellFormat ensureAndGetCellFormat() { if (cellFormat == null) { cellFormat = new CellFormat(); } return cellFormat; } public CellFormat getCellFormat() { return cellFormat; } public CellStyle getCellStyle() { return this.poiCell.getCellStyle(); } /** * Should only be called directly before the export. Please note: Excel does support only a limited number of different cell styles, so * re-use cell styles with same format. * @param cellStyle * @return this for chaining. */ public ExportCell setCellStyle(final CellStyle cellStyle) { this.poiCell.setCellStyle(cellStyle); return this; } public CellStyle ensureAndGetCellStyle() { CellStyle cellStyle = this.poiCell.getCellStyle(); if (cellStyle == null) { cellStyle = styleProvider.getWorkbook().createCellStyle(); } return cellStyle; } /** * Excel shares the cell formats and the number of cell formats is limited. This method uses a new cell style!<br/> * Don't forget to call #setCellStyle(CellStyle) if you want to apply this cloned one. * @return */ public CellStyle cloneCellStyle() { final CellStyle cellStyle = styleProvider.getWorkbook().createCellStyle(); final CellStyle origCellStyle = this.poiCell.getCellStyle(); if (origCellStyle != null) { cellStyle.cloneStyleFrom(origCellStyle); } return cellStyle; } /** * Sets the data format of the poi cell. Use this method only if you modify existing cells of an existing workbook (loaded from file). * @param dataFormat * @return this for chaining. */ public ExportCell setDataFormat(final String dataFormat) { final CellStyle cellStyle = ensureAndGetCellStyle(); final short df = styleProvider.getWorkbook().getDataFormat(dataFormat); cellStyle.setDataFormat(df); return this; } }