Java jxl匯入excel檔案,匯入的數字、社會安全號碼碼、手機號變成了科學計數法,解決方案

來源:互聯網
上載者:User

標籤:日期   ref   orm   strong   計算   inpu   數字類型   exception   公式   

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

這是一個execl檔案匯入資料庫操作,使用jxl解析execl匯入資料庫過程出現了科學計數法,與想要匯入的資料不匹配,以下是案例以及解決方案:

匯入成功後樣本
1、手機號:15388886666 科學計數法:1.54E+10
2、數字:123456789000000 科學計數法:1.23E+14
3、身份證:432222198808083789 科學計數法:4.32E+17

解決思路
1、判斷是否為數字類型(NUMBER)或數字計算公式(NUMBER_FORMULA);
2、擷取解析後的值進行判斷是否包含有(E、e、+等符號);
3、使用java內建數學類,將科學計算公式轉換成所需類型。

具體代碼

//  解析Execlpublic 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;    }

Java jxl匯入excel檔案,匯入的數字、社會安全號碼碼、手機號變成了科學計數法,解決方案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.