POI导入Excel 解析各种格式单元格公共方法整理

(可以解析文本、日期、数值、公式单元格、布尔、空值)

1、解析数值型保留两位小数,日期格式为yyyy-mm-dd以及公式型单元格

/**
	 * 获取cell中的值
	 * @param cell
	 * @return
	 */
	private  String getCellValue(HSSFCell cell) {
		if (cell != null) {
			String value = "";
			switch (cell.getCellType()) {
				case HSSFCell.CELL_TYPE_NUMERIC: // 数值型
					DecimalFormat df = new DecimalFormat("#.##");
					if (HSSFDateUtil.isCellDateFormatted(cell)) {
						SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
						value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
						// 如果是date类型则 ,获取该cell的date值
						//value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
					} else { // 纯数字
						value = df.format(cell.getNumericCellValue());
					}
					return value;
				case HSSFCell.CELL_TYPE_STRING: // 字符串型
					value = cell.getRichStringCellValue().toString();
					return value;
				case HSSFCell.CELL_TYPE_BOOLEAN: // 布尔
					value = "" + cell.getBooleanCellValue();
					return value;
				case HSSFCell.CELL_TYPE_BLANK: // 空值
					value = "";
				case HSSFCell.CELL_TYPE_ERROR: // 故障
					value = "";
					return value;
				case HSSFCell.CELL_TYPE_FORMULA:  
		            //读公式计算值  
		            /*value = String.valueOf(cell.getNumericCellValue());  
		            if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串  
		                value = cell.getStringCellValue().toString();  
		            }  
		            return value;*/
					HSSFWorkbook wb = cell.getSheet().getWorkbook();  
		            HSSFCreationHelper crateHelper = wb.getCreationHelper();  
		            HSSFFormulaEvaluator evaluator = crateHelper.createFormulaEvaluator();  
		            value = getCellValue(evaluator.evaluateInCell(cell));
		            return value;
				default:
					value = cell.getRichStringCellValue().toString();
					return value;
			}
		}
		return "";
	}


2、解析数值型单元格,excel单元格中什么精度就保留什么精度;日期类型必须为yyyy-mm-dd,无论是日期格式还是文本格式。可以解析公式型单元格。

/**
	 * 获取cell中的值
	 * @param cell
	 * @return
	 */
	private  String getCellValue(XSSFCell cell) {
		if (cell != null) {
			String value = "";
			switch (cell.getCellType()) {
				case XSSFCell.CELL_TYPE_NUMERIC: // 数值型
					//DecimalFormat df = new DecimalFormat("#.################");
					if (DateUtil.isCellDateFormatted(cell)) {
						//判断是否yyyy-mm-dd的格式
						if(178==cell.getCellStyle().getDataFormat()){
							SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
							value = sdf.format(DateUtil.getJavaDate(cell.getNumericCellValue()));
						}else{
							//String str = cell.getCellStyle().getDataFormatString();
							SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
							value = sdf.format(DateUtil.getJavaDate(cell.getNumericCellValue()));
						}
					} else { // 纯数字
						//value = df.format(cell.getNumericCellValue());
						//此处不保留小数点,而是excel写多少就是多少 
						cell.setCellType(XSSFCell.CELL_TYPE_STRING);//无条件转为文本,迫不得已
						value = cell.getRichStringCellValue().toString();
					}
					return value;
				case XSSFCell.CELL_TYPE_STRING: // 字符串型
					value = cell.getRichStringCellValue().toString();
					return value;
				case XSSFCell.CELL_TYPE_BOOLEAN: // 布尔
					value = "" + cell.getBooleanCellValue();
					return value;
				case XSSFCell.CELL_TYPE_BLANK: // 空值
					value = "";
				case XSSFCell.CELL_TYPE_ERROR: // 故障
					value = "";
					return value;
				case XSSFCell.CELL_TYPE_FORMULA:  
		            //读公式计算值  
		            /*value = String.valueOf(cell.getNumericCellValue());  
		            if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串  
		                value = cell.getStringCellValue().toString();  
		            }  
		            return value;*/
					XSSFWorkbook wb = cell.getSheet().getWorkbook();  
		            XSSFCreationHelper crateHelper = wb.getCreationHelper();  
		            XSSFFormulaEvaluator evaluator = crateHelper.createFormulaEvaluator();  
		            value = getCellValue(evaluator.evaluateInCell(cell));
		            return value;
				default:
					value = cell.getRichStringCellValue().toString();
					return value;
			}
		}
		return "";
	}

欢迎指正!

你可能感兴趣的:(Java)