Java jxl導入excel文件,導入的數字、身份證號碼、手機號變成了科學計數法,解決方案

原文出自:https://blog.csdn.net/seesun2012
java

這是一個execl文件導入數據庫操做,使用jxl解析execl導入數據庫過程出現了科學計數法,與想要導入的數據不匹配,如下是案例以及解決方案:數據庫

導入成功後示例
一、手機號:15388886666 科學計數法:1.54E+10
二、數字:123456789000000 科學計數法:1.23E+14
三、身份證:432222198808083789 科學計數法:4.32E+17.net

解決思路
一、判斷是否爲數字類型(NUMBER)或數字計算公式(NUMBER_FORMULA);
二、獲取解析後的值進行判斷是否包含有(E、e、+等符號);
三、使用java自帶數學類,將科學計算公式轉換成所需類型。excel

具體代碼code

//  解析Execl
public static List<String[]> readExcel(File filePath) {
        List<String[]> list = new ArrayList<String[]>();
        // 日期的格式化
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            // 以IO流的形式讀取文件
            InputStream in = new FileInputStream(filePath);
            // 獲取工做簿
            Workbook book = Workbook.getWorkbook(in);
            // 獲取工做表
            Sheet sheet = book.getSheet(0);
            // 獲得總列數
            int columns = sheet.getColumns();
            // 獲得總行數
            int rows = sheet.getRows();
            for (int k = 2; k < rows; k++) { // 行
                String[] row = new String[columns];
                for (int i = 0; i < columns; i++) { // 列
                    Cell cell = sheet.getCell(i, k);
                    // 得到cell具體類型值的方式
                     if (cell.getType() == CellType.LABEL) {
                        LabelCell labelcell = (LabelCell) cell;
                        row[i] = labelcell.getString();
                    }else if (cell.getType() == CellType.DATE) {// excel 類型爲時間類型處理;
                        DateCell dc = (DateCell) cell;
                        row[i] = sdf.format(dc.getDate());
                    }else if (cell.getType() == CellType.NUMBER || cell.getType() == CellType.NUMBER_FORMULA) {// excel 類型爲數值類型處理;
                        NumberCell nc = (NumberCell) cell;
                        //  判斷是否爲科學計數法(包含E、e、+等符號)
                        if ((""+nc.getValue()).indexOf("E")!=-1 || (""+nc.getValue()).indexOf("e")!=-1 || (""+nc.getValue()).indexOf("+")!=-1) {
                            BigDecimal bd = new BigDecimal(""+nc.getValue());
                            row[i] = bd.toString();
                        }else{
                            row[i] = "" +  nc.getValue();
                        }
                    } else {
                        // 通用的獲取cell值的方式,返回字符串
                        row[i] = cell.getContents();
                    }
                }
                // 添加到list集合中
                list.add(row);
            }
            // 關閉工做薄
            book.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
相關文章
相關標籤/搜索