標籤:日期 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檔案,匯入的數字、社會安全號碼碼、手機號變成了科學計數法,解決方案