POI封装之六

public class POICell implements ICell {

	private Cell cell;

	private String key;

	private FormulaEvaluator fe;

	private IRow row;

	private static final Map<String, CellStyle> CACHE = new HashMap<String, CellStyle>();

	POICell(Cell cell, String key) {
		this.cell = cell;
		this.key = key;
	}

	@Override
	public int getType() {
		return cell.getCellType();
	}

	@Override
	public void setValue(Object value) {
		int type = getType();
		if (Cell.CELL_TYPE_NUMERIC == type) {
			if (value instanceof Date) {
				Workbook wb = cell.getRow().getSheet().getWorkbook();
				CellStyle cs = wb.createCellStyle();
				cs.setDataFormat(wb.createDataFormat().getFormat("yyyy-m-d"));
				cell.setCellStyle(cs);
				cell.setCellValue((Date) value);
			} else {
				cell.setCellValue(Double.parseDouble(String.valueOf(value)));
			}

		} else if (Cell.CELL_TYPE_STRING == type) {
			cell.setCellValue(String.valueOf(value));
		} else if (Cell.CELL_TYPE_BLANK == type) {
			cell.setCellValue(String.valueOf(value));
		} else if (Cell.CELL_TYPE_BOOLEAN == type) {
			cell.setCellValue(Boolean.parseBoolean(String.valueOf(value)));
		} else if (Cell.CELL_TYPE_FORMULA == type) {
			cell.setCellFormula(String.valueOf(value));
		} else {
			cell.setCellValue((RichTextString) value);
		}

	}

	@Override
	public String getKey() {
		return key;
	}

	@Override
	public Object evaluate() {
		if (null == fe) {
			fe = cell.getSheet().getWorkbook().getCreationHelper()
					.createFormulaEvaluator();
		}
		CellValue cv = fe.evaluate(cell);
		if (cv == null) {
			return null;
		}
		return getCellValue(cv);
	}

	private Object getCellValue(CellValue cv) {

		switch (cv.getCellType()) {
		case Cell.CELL_TYPE_BOOLEAN:
			return cv.getBooleanValue();
		case Cell.CELL_TYPE_NUMERIC:
			return cv.getNumberValue();
		case Cell.CELL_TYPE_STRING:
			return cv.getStringValue();
		case Cell.CELL_TYPE_BLANK:
			return null;
		case Cell.CELL_TYPE_ERROR:
			return null;
		case Cell.CELL_TYPE_FORMULA:
			return null;
		}
		return null;
	}

	@Override
	public IRow getRow() {
		return this.row;
	}

	void setRow(IRow row) {
		this.row = row;
	}

	@Override
	public ICellValue getCellValue() {
		return new POICellValue(cell);
	}

	@Override
	public void setValue(Object value, String dataFormat) {
		int type = getType();
		Workbook wb = cell.getRow().getSheet().getWorkbook();

		CellStyle cs = null;
		if (CACHE.containsKey(dataFormat)) {
			cs = CACHE.get(dataFormat);
		} else {
			cs = wb.createCellStyle();
			cs.setDataFormat(wb.createDataFormat().getFormat(dataFormat));
			cs.setWrapText(true);
			cs.setShrinkToFit(true);
			CACHE.put(dataFormat, cs);
		}

		cell.setCellStyle(cs);

		if (Cell.CELL_TYPE_NUMERIC == type) {
			if (value instanceof Date) {
				cell.setCellValue((Date) value);
			} else {
				cell.setCellValue(Double.parseDouble(String.valueOf(value)));
			}

		} else if (Cell.CELL_TYPE_STRING == type) {
			cell.setCellValue(String.valueOf(value));
		} else if (Cell.CELL_TYPE_BLANK == type) {
			cell.setCellValue(String.valueOf(value));
		} else if (Cell.CELL_TYPE_BOOLEAN == type) {
			cell.setCellValue(Boolean.parseBoolean(String.valueOf(value)));
		} else if (Cell.CELL_TYPE_FORMULA == type) {
			cell.setCellFormula(String.valueOf(value));
		} else {
			cell.setCellValue((RichTextString) value);
		}
	}
}

猜你喜欢

转载自walkon.iteye.com/blog/2317885
今日推荐