Java后端避坑——number类型转换成Integer类型

栏目: Java · 发布时间: 5年前

内容简介:Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF。使用POI进行Excel表格导入的时候,经常会碰到格式转换的问题。今天在项目中导入Excel表出现了如下错误:一开始将Excel表中的编号设置为String类型,在前端导入Excel表格之后就报上面的错误,于是就把编号更改为Number类型,但是碰到类型转换的的问题,编译器给出了如下的提示:上网搜了一下,百度知道有小伙伴提供了如下的思路:

Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF。使用POI进行Excel表格导入的时候,经常会碰到格式转换的问题。今天在项目中导入Excel表出现了如下错误:

2019-04-24 22:06:06.799 ERROR 7248 --- [io-8082-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell] with root cause java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell

一开始将Excel表中的编号设置为String类型,在前端导入Excel表格之后就报上面的错误,于是就把编号更改为Number类型,但是碰到类型转换的的问题,编译器给出了如下的提示:

Java后端避坑——number类型转换成Integer类型

上网搜了一下,百度知道有小伙伴提供了如下的思路:

cell.getNumericCellValue() 返回的是double

Integer.parseInt只能转string

可以强制规定该单元格的格式为String

cell.setCellType(1);//设置为String

String str_temp = cell.getStringCellValue().trim();//得到值

Inetger a = Integer.parseInt(str_temp);//转换

因此按照此思路进行修改,解决了报错的问题,更改后的代码如下

正确示例程序如下:

public static List<JObLevel> parseFile2list(MultipartFile file) throws IOException{
    List<JObLevel> jObLevels = new ArrayList<>();
    //创建文档对象
    HSSFWorkbook workbook = new HSSFWorkbook(file.getInputStream());
    //创建excel的表单
    HSSFSheet sheet = workbook.getSheetAt(0);
    int physicalNumberofRows = sheet.getPhysicalNumberOfRows();
    for (int i = 1;i < physicalNumberofRows;i++){
    HSSFRow row = sheet.getRow(i);
    HSSFCell c0 = row.getCell(0);
    double numericCellValue = c0.getNumericCellValue();//返回double
    JObLevel jl = new JObLevel();
    c0.setCellType(CellType.STRING);//设置为String
    String str_temp = c0.getStringCellValue();//得到值
    Integer int_temp = Integer.parseInt(str_temp);//转换
    jl.setId(int_temp);
    }
    return jObLevels;
}
复制代码

虽然解决了报错,但总感觉这个不是最佳的解决方法,因为要先获取String类型的值然后再进行转换,显得特别麻烦。于是向身边的同事请教之后,采用强制类型转换的方法,直接转成int类型。

示例程序如下:

public static List<JObLevel> parseFile2list(MultipartFile file) throws IOException{
    List<JObLevel> jObLevels = new ArrayList<>();
    //创建文档对象
    HSSFWorkbook workbook = new HSSFWorkbook(file.getInputStream());
    //创建excel的表单
    HSSFSheet sheet = workbook.getSheetAt(0);
    int physicalNumberofRows = sheet.getPhysicalNumberOfRows();
    for (int i = 1;i < physicalNumberofRows;i++){
    HSSFRow row = sheet.getRow(i);
    HSSFCell c0 = row.getCell(0);
    double numericCellValue = c0.getNumericCellValue();//返回double
    JObLevel jl = new JObLevel();
    jl.setId((int)numericCellValue);
    }
    return jObLevels;
}
复制代码

相比而言,下面的这种强制类型转换要简介很多,一行代码搞定!

积少成多,滴水穿石!


以上所述就是小编给大家介绍的《Java后端避坑——number类型转换成Integer类型》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

引爆流行

引爆流行

[美] 马尔科姆·格拉德威尔 / 钱清、覃爱冬 / 中信出版社 / 2002-7 / 18.00元

马尔科姆·格拉德威尔以社会上突如其来的流行风潮研究为切入点,从一个全新的角度探索了控制科学和营销模式。他认为,思想、行为、信息以及产品常常会像传染病爆发一样,迅速传播蔓延。正如一个病人就能引起一场全城流感;如果个别工作人员对顾客大打出手,或几位涂鸦爱好者管不住自己,也能在地铁里掀起一场犯罪浪潮;一位满意而归的顾客还能让新开张的餐馆座无虚席。这些现象均属“社会流行潮”,它爆发的那一刻,即达到临界水平......一起来看看 《引爆流行》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试