Java後端避坑——number類型轉換成Integer類型

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 celljava

一開始將Excel表中的編號設置爲String類型,在前端導入Excel表格以後就報上面的錯誤,因而就把編號更改成Number類型,可是碰到類型轉換的的問題,編譯器給出了以下的提示:spa

上網搜了一下,百度知道有小夥伴提供了以下的思路:

cell.getNumericCellValue() 返回的是double
Integer.parseInt只能轉string
能夠強制規定該單元格的格式爲String
cell.setCellType(1);//設置爲String
String str_temp = cell.getStringCellValue().trim();//獲得值
Inetger a = Integer.parseInt(str_temp);//轉換3d

所以按照此思路進行修改,解決了報錯的問題,更改後的代碼以下excel

正確示例程序以下:

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類型。code

示例程序以下:

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;
}
複製代碼

相比而言,下面的這種強制類型轉換要簡介不少,一行代碼搞定!cdn

聚沙成塔,滴水穿石!對象

相關文章
相關標籤/搜索