poi 导出excel(BigDecimal数据类型)左上角有绿色小三角解决

在做poi导出excel肯定会有这么一段代码如下:

public Cell addCell(Row row, int column, Object val, int align, Class<?> fieldType){
		Cell cell = row.createCell(column);
		CellStyle style1 = styles.get("data"+(align>=1&&align<=3?align:""));
		CellStyle style = wb.createCellStyle();
		style.cloneStyleFrom(style1);
		try {
			if (val == null){
				cell.setCellValue("");
			} else if (val instanceof String) {
				cell.setCellValue((String) val);
			} else if (val instanceof Integer) {
				cell.setCellValue((Integer) val);
			} else if (val instanceof Long) {
				cell.setCellValue((Long) val);
			} else if (val instanceof Double) {
				cell.setCellValue((Double) val);
			} else if (val instanceof Float) {
				cell.setCellValue((Float) val);
			} else if (val instanceof Date) {
				DataFormat format = wb.createDataFormat();
	            style.setDataFormat(format.getFormat("yyyy/MM/dd"));
				cell.setCellValue((Date) val);
			}  else if (val instanceof BigDecimal) {
				double doubleVal = ((BigDecimal) val).doubleValue();
				DataFormat format = wb.createDataFormat();
	            style.setDataFormat(format.getFormat("¥#,##0.00"));
				cell.setCellValue(doubleVal);
			}else {
				if (fieldType != Class.class){
					cell.setCellValue((String)fieldType.getMethod("setValue", Object.class).invoke(null, val));
				}else{
					cell.setCellValue((String)Class.forName(this.getClass().getName().replaceAll(this.getClass().getSimpleName(), 
						"fieldtype."+val.getClass().getSimpleName()+"Type")).getMethod("setValue", Object.class).invoke(null, val));
				}
			}
		} catch (Exception ex) {
			log.info("Set cell value ["+row.getRowNum()+","+column+"] error: " + ex.toString());
			cell.setCellValue(val.toString());
		}
		cell.setCellStyle(style);
		return cell;
	}

 

注意其中BigDecimal数据类型的转换方法

 

 

else if (val instanceof BigDecimal) {
				/*
				 * 最初的val是没有类型的需要强转,既然强转为什么不直接转成Double类型,而是这样转成BigDecimal类型,
				 * 再用doubleValue方法转呢,完全可以这样做double doubleVal = (Double)val;在编译的时候不会报错,
				 * 运行时候会抱异常 java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Double
				 * 经实践还是用下面的代码才可以导出的数据上面没有小三角。
				 */
				double doubleVal = ((BigDecimal) val).doubleValue();
				DataFormat format = wb.createDataFormat();
				//此格式是货币格式
	            style.setDataFormat(format.getFormat("¥#,##0.00"));
	            //最终必须接收一个double类型的数据
				cell.setCellValue(doubleVal);

 

 

 

 

 

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值