POI读取Excel,有些文本自动变成科学计数法解决办法

先附上读取excel单元格数据的代码

//判断数据的类型
switch (cell.getCellType()) {
   case Cell.CELL_TYPE_NUMERIC: //数字
      cellValue = String.valueOf(cell.getNumericCellValue());
      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 = "";
      break;
   case Cell.CELL_TYPE_ERROR: //故障
      cellValue = "非法字符";
      break;
   default:
      cellValue = "未知类型";
      break;
}
return cellValue;

 

excel数据结构

在我们导入excel到系统中时,常会遇到有些诸如序号、编码等这些文本类型的整数数字,以及带多位小数的数字,如上图为excel各列,这时我们要求序号、编码等整数数字导入进去之后不带小数,比如1变成1.0,编码变成科学计数法,比如10000292变为1.0000292E7,如下图

这时1月、2月等原本带有小数点的数据并没有什么问题,但是序号、编码等不符合要求。

 

而在读取excel数据类型的时候我们加上这一句之后就会防止9变成9.0,10000292变成科学计数法,但是这时1月、2月等原本带有小数点的数据出现了精确度不足的问题,当然也不符合要求,如下图

if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
            cell.setCellType(Cell.CELL_TYPE_STRING);
        }

这种情况下无法两全其美,所以考虑过后想到一个办法:如果单元格内容本身是整数就设置cell.setCellType(Cell.CELL_TYPE_STRING),如果不是整数就不对其进行数据类型的设置,但是如何判断这个单元格内容是不是整数呢,因为默认poi返回的为double类型,所以先转为long再进行判断,判断方式如下:

if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
   long longVal = Math.round(cell.getNumericCellValue());
   Double doubleVal = cell.getNumericCellValue();
   if (Double.parseDouble(longVal + ".0") == doubleVal){
      cell.setCellType(Cell.CELL_TYPE_STRING);
   }
}

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值