解决java读取EXCEL数据变成科学计数法的问题
Posted 理智Ming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决java读取EXCEL数据变成科学计数法的问题相关的知识,希望对你有一定的参考价值。
文章目录
问题背景
excel导入数据经常遇到会有手机号或身份证号导入后变成科学计数法的形式给维护数据带来了很多麻烦
此时手机号是数字的形式,而我们需要的是字符的形式,如下图,特征是有个绿色三角的上标
解决方案
解决思路
考虑问题一般从,输入,处理,输出三个方面考虑。那么可以首先调整导入的数据本身,主动调整成正确的格式,或者在处理逻辑的时候进行判断调整,因此我们可以有两个方案
1.修改导入excel数据本身为字符
在excel文件中,选中手机号列–数据–分列–下一步–下一步–文本–完成再重新导入即可
本方法适用于无法调整代码逻辑的情形,比如线上环境。
缺点显而易见,每次维护数据都得注意格式
2.代码逻辑处理科学计数法
2.1处理逻辑
拿到excel上传为字符串 -> 正则去匹配校验字符串是否为科学计数法 -> 是,则将科学计数法字符串转化成数字的字符串 -> 赋值给原有的变量
2.2show me the code
/**
* 将科学计数法文本转换成字符文本
* @param number
* @return
*/
public String translateToPlainStr(String number)
if (StringUtil.isNull(number))
return number;
String regEx="^([\\\\+|-]?\\\\d+(.0|.\\\\d+))[Ee]1([\\\\+|-]?\\\\d+)$";
// 编译正则表达式
Pattern pattern = Pattern.compile(regEx);
// 忽略大小写的写法
// Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(number);
// 字符串是否与正则表达式相匹配
boolean rs = matcher.matches();
// 判断是否为字符串的科学计数法
if(rs)
// 科学计数法转数字
BigDecimal originValue = new BigDecimal(number);
System.out.println("手机号为 ==> " + one.toPlainString());
// 数字转字符串
return originValue.toPlainString();
return number;
处理结果
java使用poi读取excel时,电话号码变成了科学计数法,整数变成double,怎么改过来
参考技术A为了防止数字变成科学计数法方式表示,在源文件以及java代码中都用文的方式去生成和解析excel,具体如下:
生成Excel时,设置单元格格式为STRING,即:
//关键代码
HSSFCell cell = new HSSFCell();
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
同理,解析的时候,首先要保证源excel文件中该单元格格式是文本类型的,然后在java代码里用STRING类型去解析:
//关键代码
String value = cell.getStringCellValue();
扩展资料;
在这里,将只介绍一些和格式设置有关的语句,假定workbook就是对一个工作簿的引用。在Java中,第一步要做的就是创建和设置字体和单元格的格式,然后再应用这些格式:
创建字体,设置其为红色、粗体:
HSSFFont font = workbook.createFont();
font.setColor(HSSFFont.COLOR_RED);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
参考资料来源:百度百科-POI
以上是关于解决java读取EXCEL数据变成科学计数法的问题的主要内容,如果未能解决你的问题,请参考以下文章
解决从Excel导入数据库,导入到DataTable时数据类型发生变化的问题(如数字类型变成科学计数法,百分数变成小数)
java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的
Java jxl导入excel文件,导入的数字身份证号码手机号变成了科学计数法,解决方案
excel 文本转换数字,数字变成科学计数法了,该怎么解决??