SpringBoot中匯入Excel的總結
阿新 • • 發佈:2018-12-14
1 先匯入配置檔案
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> </dependency>
2 編寫Chontroller
/** * 上傳excel檔案 * @author SHF * @version 建立時間:2018年12月14日 上午9:28:14 * @param excelInput * @param type 1:大客戶經理 2內部人員' * @return * @throws Exception */ @RequestMapping("/uploadExcel") @ResponseBody public Object uploadExcel(@RequestParam("excelInput") MultipartFile excelInput,Integer type) throws Exception{ // 檢查檔案型別 String fileName = checkFile(excelInput); Workbook workbook = null; InputStream inputStream = excelInput.getInputStream(); List<String[]> list = new ArrayList<String[]>(); try { workbook = WorkbookFactory.create(inputStream); int numberOfSheets = workbook.getNumberOfSheets(); if (numberOfSheets > 0) { Sheet sheet = workbook.getSheetAt(0); if (null != sheet) { // 獲得當前sheet的開始行 int firstRowNum = sheet.getFirstRowNum(); // 獲得當前sheet的結束行 int lastRowNum = sheet.getLastRowNum(); for (int rowNum = firstRowNum; rowNum <= lastRowNum; rowNum++) { // 獲得當前行 Row row = sheet.getRow(rowNum); if (row == null) { continue; } // 獲得當前行的開始列 int firstCellNum = row.getFirstCellNum(); // 獲得當前行的列數 int lastCellNum = row.getLastCellNum(); String[] cells = new String[row.getLastCellNum()]; // 迴圈當前行 for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++) { Cell cell = row.getCell(cellNum); cells[cellNum] = getCellValue(cell); } list.add(cells); } } } //插入資料 if (!list.isEmpty()) { for (String[] strs : list) { Integer userId = ShiroKit.getUser().getId(); Date date = new Date(); String name = strs[0]; String dept_userType = strs[1]; String phone = strs[2]; if(StringUtils.isBlank(phone)) { throw new Exception("手機號碼不能為空"); } ProjectInnerUser tProjectInnerUser = tProjectInnerUserService.selectOne(new EntityWrapper<ProjectInnerUser>().eq("phone", phone).eq("is_enable", 1).eq("is_deleted", 0)); if(tProjectInnerUser == null) { tProjectInnerUser = new ProjectInnerUser(); tProjectInnerUser.setName(name); tProjectInnerUser.setPhone(phone); if(type == 1) { tProjectInnerUser.setDept(dept_userType); }else { tProjectInnerUser.setUserType(dept_userType); } tProjectInnerUser.setType(type); tProjectInnerUser.setRemark("excel匯入的資料"); tProjectInnerUser.setIsDeleted(0); tProjectInnerUser.setIsEnable(1); tProjectInnerUser.setCreator(userId); tProjectInnerUser.setCreated(new Date()); tProjectInnerUser.setModifier(userId); tProjectInnerUser.setModified(date); tProjectInnerUserService.insert(tProjectInnerUser); }else { tProjectInnerUser.setName(name); if(type == 1) { tProjectInnerUser.setDept(dept_userType); }else { tProjectInnerUser.setUserType(dept_userType); } tProjectInnerUser.setType(type); tProjectInnerUser.setRemark("excel匯入的資料"); tProjectInnerUser.setModifier(userId); tProjectInnerUser.setModified(date); tProjectInnerUserService.updateById(tProjectInnerUser); } } } } catch (EncryptedDocumentException e1) { e1.printStackTrace(); } catch (InvalidFormatException e1) { e1.printStackTrace(); } finally { if (null != workbook) { workbook.close(); } if (null != inputStream) { inputStream.close(); } } return SUCCESS_TIP; } public static String checkFile(MultipartFile file) throws IOException { // 判斷檔案是否存在 if (null == file) { throw new GunsException(BizExceptionEnum.FILE_NOT_FOUND); } // 獲得檔名 String fileName = file.getOriginalFilename(); // 判斷檔案是否是excel檔案 if (!fileName.endsWith("xls") && !fileName.endsWith("xlsx")) { throw new GunsException(BizExceptionEnum.UPLOAD_NOT_EXCEL_ERROR); } return fileName; } /** * 根據不同型別獲取值 * * @param cell * @return */ public static String getCellValue(Cell cell) { String cellValue = ""; if (cell == null) { return cellValue; } // 判斷資料的型別 switch (cell.getCellTypeEnum()) { case NUMERIC: // 數字 cellValue = stringDateProcess(cell); break; case STRING: // 字串 cellValue = String.valueOf(cell.getStringCellValue()); break; case BOOLEAN: // Boolean cellValue = String.valueOf(cell.getBooleanCellValue()); break; case FORMULA: // 公式 cellValue = String.valueOf(cell.getCellFormula()); break; case BLANK: // 空值 cellValue = ""; break; case ERROR: // 故障 cellValue = "非法字元"; break; default: cellValue = "未知型別"; break; } return cellValue; } /** * 時間格式轉換 * * @param cell * @return */ public static String stringDateProcess(Cell cell) { String result = new String(); if (HSSFDateUtil.isCellDateFormatted(cell)) {// 處理日期格式、時間格式 SimpleDateFormat sdf = null; if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) { sdf = new SimpleDateFormat("HH:mm "); } else {// 日期 sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); } Date date = cell.getDateCellValue(); result = sdf.format(date); } else if (cell.getCellStyle().getDataFormat() == 58) { // 處理自定義日期格式:m月d日(通過判斷單元格的格式id解決,id的值是58) SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); double value = cell.getNumericCellValue(); Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value); result = sdf.format(date); } else { double value = cell.getNumericCellValue(); CellStyle style = cell.getCellStyle(); DecimalFormat format = new DecimalFormat(); String temp = style.getDataFormatString(); // 單元格設定成常規 if (temp.equals("General")) { format.applyPattern("#"); } result = format.format(value); } return result; }