一. 单元格为数字 Cell cell = row.getCell(int t) 的返回值 为 xx.0 的问题处理

由于数据库中定义的是varchar 类型 xx.0 的数据 会影响业务的逻辑

1.第一种办法,获取值的时候转换类型
double  tcell  = cell.getNumericCellValue();
	再把double 转成你需要的格式
2.第二种办法 使用 NumberFormat (DecimalFormat) 来处理数据
String result = new String();
double value = cell.getNumericCellValue();
DecimalFormat format = new DecimalFormat();
result = format.format(value);
PS:这里需要注意  如果传的数值是 科学计数法的 科学计数法的数字就转换成了带逗号的,
例如:12345678912345的科学计数法是1.23457E+13,经过这个格式化后就变成了字符串“12,345,678,912,345”,
 或者是这个数值本身比较大, 在EXCEL中显示的时候是 
 ![在这里插入图片描述] 这也并不是想要的结果
所以 我们需要 进行一下数据的处理

if(result!=null && result.indexOf(",")>=0){
	result = result.replaceAll(",","");
}
这样就达到预期的结果了

二.有关时间格式的数据处理 (拷用了前辈的方法)

我把它和数字的处理合成了一个方法.
/**
	 * 	判断单元格的内容 属于什么类型的数据 相应进行转换
	 * @param cell 数据对象
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public static Object getCellFormatValue(Cell cell) {
		Object cellValue = null;
		if (cell != null) {
			// 判断cell类型
			switch (cell.getCellType()) {
			
			case Cell.CELL_TYPE_NUMERIC: // 数字
				cellValue = stringDateProcess(cell);
				break;
			case Cell.CELL_TYPE_STRING: // 字符串
				cellValue = String.valueOf(cell.getStringCellValue());
				break;
			case Cell.CELL_TYPE_BOOLEAN: // Boolean
				cellValue = String.valueOf(cell.getBooleanCellValue());
				break;
			case Cell.CELL_TYPE_FORMULA: // 公式
				cellValue = String.valueOf(cell.getCellFormula());
				break;
			case Cell.CELL_TYPE_BLANK: // 空值
				cellValue = cell.getStringCellValue();
				break;
			case Cell.CELL_TYPE_ERROR: // 异常
				cellValue = "非法字符";
				break;
			default:
				cellValue = cell;
				break;
			}
		} else {
			cellValue = "";
		}
		return cellValue;
	}
/**
	 * 	解析Excel日期格式转换方法
	 * @param cell 数据对象
	 * @return
	 */
	public static String stringDateProcess(Cell cell) {
		String result = new String();
		if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
			SimpleDateFormat sdf = null;
			if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {
				sdf = new SimpleDateFormat("HH:mm");
			} else {// 日期
				sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
			}
			Date date = cell.getDateCellValue();
			result = sdf.format(date);
		} else if (cell.getCellStyle().getDataFormat() == 58) {
			// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
			double value = cell.getNumericCellValue();
			Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
			result = sdf.format(date);
		} else {
			double value = cell.getNumericCellValue();
			CellStyle style = cell.getCellStyle();
			DecimalFormat format = new DecimalFormat();
			String temp = style.getDataFormatString();
			// 单元格设置成常规
			if (temp.equals("General")) {
				format.applyPattern("#");
			}
			result = format.format(value);
			if (result!=null && result.indexOf(",")>=0) {
				result = result.replaceAll(",","");
			}
			
			
		}
		return result;
	}

补充: 在实现完成之后,还遇到一个这样的问题. 如果给的数据小数位过长DecimalFormat 只会保留3位小数. 下面给出处理办法

0和#都是占位符,但在不同的地方,作用不一样。下面对他们做了具体的比较。
	希望对大家有所帮助。
	0: 
	    比实际数字的位数多,不足的地方用0补上。
	    new DecimalFormat("00.00").format(3.14)  //结果:03.14
	    new DecimalFormat("0.000").format(3.14)  //结果: 3.140
	    new DecimalFormat("00.000").format(3.14)  //结果:03.140
	    比实际数字的位数少:整数部分不改动,小数部分,四舍五入
	    new DecimalFormat("0.000").format(13.146)  //结果:13.146
	    new DecimalFormat("00.00").format(13.146)  //结果:13.15
	    new DecimalFormat("0.00").format(13.146)  //结果:13.15
#: 
		 **比实际数字的位数多,不变。**
	    new DecimalFormat("##.##").format(3.14)  //结果:3.14
	    new DecimalFormat("#.###").format(3.14)  //结果: 3.14
	    new DecimalFormat("##.###").format(3.14)  //结果:3.14
	    比实际数字的位数少:整数部分不改动,小数部分,四舍五入
	    new DecimalFormat("#.###").format(13.146)  //结果:13.146
	    new DecimalFormat("##.##").format(13.146)  //结果:13.15
	    new DecimalFormat("#.##").format(13.146)  //结果:13.15
    ```
    EX: DecimalFormat format = new DecimalFormat("#.##########");   ####代表你要保留的几位小数, 
    根据自己业务情况而定.