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

您所在的位置:网站首页 excel文件怎么改成文本格式的内容显示 POI读取Excel,有些文本自动变成科学计数法解决办法

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

2024-07-17 18:21| 来源: 网络整理| 查看: 265

先附上读取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); } }

 

 

 



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3