1. 程式人生 > >SpringBoot中匯入Excel的總結

SpringBoot中匯入Excel的總結

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;
	}