使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10

雄么 2010-09-13 05:33:03
使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10 如何 解决?
...全文
6564 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZDP 2012-10-30
  • 打赏
  • 举报
回复
gep910120 2012-04-11
  • 打赏
  • 举报
回复
我也遇到这个问题好纠结
zhuwei0129 2012-01-11
  • 打赏
  • 举报
回复
使用java.text.DecimalFormat df = new DecimalFormat("########");

df.format(cell.getNumericCellValue());
热带鱼2020 2011-08-25
  • 打赏
  • 举报
回复 3
DecimalFormat df = new DecimalFormat("#");
list.add(df.format(cell.getNumericCellValue()));

用到了。
kerioz 2010-09-26
  • 打赏
  • 举报
回复
那个是它自己的科学计数法 没事 自己设置下格式就好 你要是把那列拉大点他就是你原先那个手机号了 呵呵 我当时也是吓了一跳
ayongw 2010-09-26
  • 打赏
  • 举报
回复
单元格的格式要设置成文字就可以了。比如有歧义的东西要设置好的。
mxx123 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 eemean 的回复:]
你要多判断一下,CELL TYPE好像有四种类型的,,
[/Quote]
正解。
angel_xx 2010-09-26
  • 打赏
  • 举报
回复
很简单,如果你用的是Int,Integer等这样的数值类型的话,当长度达到一定的长度后,会用相关的数位字符所代替,所以会变成楼主所说的那种情况,所以我做项目的时候,所有的电话号码,和身份证号码等等这样设置到很长一串的数据的时候,我会用字符串去接受,只需要在输入的时候或者录入数据库的时候加入相关的判断就可以了。。。
zn85600301 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kerioz 的回复:]

那个是它自己的科学计数法 没事 自己设置下格式就好 你要是把那列拉大点他就是你原先那个手机号了 呵呵 我当时也是吓了一跳
[/Quote]
是的 大家都碰到过
youjianbo_han_87 2010-09-26
  • 打赏
  • 举报
回复
你 Excel 里面,保存手机号这列,定义为字符,而不是数字。(就是单元格左上角要出现绿三角)。否则POI会认为你这列式数字,而不是字符。

程序里面读取的时候,读取 StringValue,我记得你这个问题已经提问题过,我回答了你。。。
ibookvip 2010-09-26
  • 打赏
  • 举报
回复
excel 设置一下就行了,单元格 设置,为 文本字符 ,跟你的程序没有关系,如果有兴趣也可以看一看代码能不能控制 单元格的设置
yaojj_147258369 2010-09-13
  • 打赏
  • 举报
回复
最好处理方法是在讲值set给excel的时候转换成字符,就不会了;
雄么 2010-09-13
  • 打赏
  • 举报
回复
解决了 是一个转换问题


//将被表示成1.3922433397E10的手机号转化为13922433397,不一定是最好的转换方法
DecimalFormat df = new DecimalFormat("#");

System.out.println("type666=="+df.format(cell.getNumericCellValue()));
雄么 2010-09-13
  • 打赏
  • 举报
回复

if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {


DateFormat format = new SimpleDateFormat(DateUtil.YYYY_MM_DD);


if(HSSFDateUtil.isCellDateFormatted(cell)) {
// 是否为日期型
str = format.format(cell.getDateCellValue());
} else {
// 是否为数值型
double d = cell.getNumericCellValue();
if (d - (int) d < Double.MIN_VALUE) {
// 是否为int型
str = Integer.toString((int) d);
} else {
System.out.println("double.....");
// 是否为double型
str = Double.toString(cell.getNumericCellValue());
}
}

System.out.println("type=="+cell.getCellType() );
System.out.println("cell=="+str);


}else if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
str = cell.getRichStringCellValue().getString();
}else if (cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA) {
str = cell.getCellFormula();
}else if (cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
str = " ";
}else if (cell.getCellType() == HSSFCell.CELL_TYPE_ERROR) {
str = " ";
}




这几种 类型 都做判断了 依然还是 1.3471022771E10





eemean 2010-09-13
  • 打赏
  • 举报
回复
你要多判断一下,CELL TYPE好像有四种类型的,,

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧