poi excel批量匯入 解決各型別的資料
阿新 • • 發佈:2019-02-04
注意引入的都是poi的包,使用Cell,excel2003的.xls對應是HSSFCell,而之後的xlsx對應的則是XSSFCell,但是他們都繼承於Cell,所以使用Cell就可以使用兩種格式的excel匯入了,下面解決excel中資料的各種格式
//讀取excel try { request.setCharacterEncoding("gbk"); response.setContentType("text/html;charset=gbk"); // 1. 建立工廠類 DiskFileItemFactory factory = new DiskFileItemFactory(); // 2. 建立FileUpload物件 ServletFileUpload upload = new ServletFileUpload(factory); // 3. 判斷是否是上傳表單 // boolean b = upload.isMultipartContent(request); // 設定上傳檔案最大值 upload.setSizeMax(25 * 1024 * 1024); // 是檔案上傳表單 // 4. 解析request,獲得FileItem項 List<FileItem> fileitems = upload.parseRequest(request); // 5. 遍歷集合 for (FileItem item : fileitems) { // 判斷是不是普通欄位 if (!item.isFormField()) { // 獲得流,讀取資料寫入檔案 InputStream in = item.getInputStream(); Workbook book = createWorkBook(in,item.getName()); // 獲得第一個工作表物件 Sheet sheet = book.getSheetAt(0); if(0==sheet.getLastRowNum()){ //如果沒有資料 request.setAttribute("message", "excel的sheet0中不存在資料"); request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response); } // 第一行為標題,從第二行開始錄入 for (int i = 1; i <= sheet.getLastRowNum(); i++) { //標題行,用來對比方便得到資料 Row titleRow = sheet.getRow(0); //資料行 Row row = sheet.getRow(i); //獲得值 String value_temp= this.getValue((Cell) row.getCell(2)); } } } } catch (Exception e) { e.printStackTrace(); message="匯入失敗<br/>"+message; request.setAttribute("message",message); request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response); }
數字型別 時間型別 字串型別驗證沒問題,
數字型別如果是1234.0會將其變成1234 如果是1234.5儲存仍然保持小數位1234.5,用來解決電話號碼和普通數字問題
時間型別將其格式化成了 2015-12-09 12:13:12這種格式便於儲存資料庫
//解決excel型別問題,獲得數值 public String getValue(Cell cell) { String value = ""; if(null==cell){ return value; } switch (cell.getCellType()) { //數值型 case Cell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { //如果是date型別則 ,獲取該cell的date值 Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); value = format.format(date);; }else {// 純數字 BigDecimal big=new BigDecimal(cell.getNumericCellValue()); value = big.toString(); //解決1234.0 去掉後面的.0 if(null!=value&&!"".equals(value.trim())){ String[] item = value.split("[.]"); if(1<item.length&&"0".equals(item[1])){ value=item[0]; } } } break; //字串型別 case Cell.CELL_TYPE_STRING: value = cell.getStringCellValue().toString(); break; // 公式型別 case Cell.CELL_TYPE_FORMULA: //讀公式計算值 value = String.valueOf(cell.getNumericCellValue()); if (value.equals("NaN")) {// 如果獲取的資料值為非法值,則轉換為獲取字串 value = cell.getStringCellValue().toString(); } break; // 布林型別 case Cell.CELL_TYPE_BOOLEAN: value = " "+ cell.getBooleanCellValue(); break; // 空值 case Cell.CELL_TYPE_BLANK: value = ""; LogUtil.getLogger().error("excel出現空值"); break; // 故障 case Cell.CELL_TYPE_ERROR: value = ""; LogUtil.getLogger().error("excel出現故障"); break; default: value = cell.getStringCellValue().toString(); } if("null".endsWith(value.trim())){ value=""; } return value; }