SpringBoot + POI 實現上傳excel功能

HTML

<div class="buttons">
						<div class="layui-upload">
							<a class="btn btn-primary fa fa-search search-link" href="javascript:void(0);" ><span>搜索</span></a>
							

							<a type="button" class=" btn btn-primary fa " id="upExcel"><i class="layui-icon">&#xe681;</i>上傳文件</a>
						</div>
	</div>

JS

/**
		 * 上傳excel
		 */
		upExcel:function () {
			var me=this;
			layui.use('upload', function () {
				var upload = layui.upload;
				upload.render({
					elem: '#upExcel'
					,url: __ctx+'/platform/data/uemiReport/upExcel'
					,accept: 'file' //普通文件
					,exts: 'xls|xlsx' //允許上傳的文件後綴
					,done: function(res){
						//如果上傳成功
						if (res.result==1) {
							//追加圖片成功追加文件名至圖片容器
							DialogUtil.alert(res.message);
						}else {
							//提示信息
							DialogUtil.alert(res.message);
						}
					}
				});

			});
		},

controller

@RequestMapping("upExcel")
	public ResultMessage upExcel(MultipartHttpServletRequest request, HttpServletResponse response) throws Exception {
		ResultMessage message=null;
			MultipartFile file = request.getFile("file");
			String fileName = file.getOriginalFilename();
			String filePath = "D:/excel";
			File dest = new File(filePath + fileName);
			file.transferTo(dest);
		 	Long userId = ContextUtil.getLoginUserId();
		 	message = cemsDataService.importData(dest,userId);
			dest.delete();
		return message;
	}

service

@Override
	public ResultMessage importData(File excel, Long userId) {
		ResultMessage message=null;
		try {
			List<List<String>> lists = readExcel(excel);
			String check=this.checkIsImport(lists,userId);
			if(!check.equals("")){
				message=new ResultMessage(ResultMessage.Fail, check);
			}else {
				int i = 0;
				for (List<String> list : lists) {
					if (i == 0) {
						i++;
						continue;
					}
					CemsData cemsData = new CemsData();
					int j = 0;
					for (String strs : list) {
						switch (j) {
							case 0://企業代碼
								j += 1;
								if (!strs.equals("null")) {
									Station factory = stationService.getByCode(strs);
									if (BeanUtils.isNotEmpty(factory)) {
										cemsData.setFactoryId(factory.getId());
									}
								}
								break;
							case 1:
								j += 1;
								break;
							case 2://排口編號
								j += 1;
								if (!strs.equals("null")) {
									Station emi = stationService.getByCode(strs);
									if (BeanUtils.isNotEmpty(emi)) {
										cemsData.setEmiId(emi.getId());
									}
								}
								break;
							case 3:
								j += 1;
								break;
							case 4://採集時間
								j += 1;
								SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
								if (!strs.equals("null")) {
									cemsData.setCollectTime(sdf.parse(strs));
								}
								break;
							case 5://煙塵
								j += 1;
								if (!strs.equals("null")) {
									cemsData.setSmoke(Double.parseDouble(strs));
								}
								break;
							case 6://二氧化硫
								j += 1;
								if (!strs.equals("null")) {
									cemsData.setSo2(Double.parseDouble(strs));
								}
								break;
							case 7://氮氧化物
								j += 1;
								if (!strs.equals("null")) {
									cemsData.setNox(Double.parseDouble(strs));
								}
								break;
							case 8://VOCs
								j += 1;
								if (!strs.equals("null")) {
									cemsData.setVocs(Double.parseDouble(strs));
								}
								break;
							case 9://當日排放量
								j += 1;
								if (!strs.equals("null")) {
									cemsData.setEmiCount(Double.parseDouble(strs));
								}
								break;
							case 10://小時均值是否達標
								j += 1;
								if (!strs.equals("null")) {
									if (strs.equals("是")) {
										cemsData.setIsStandard((short) 1);
									}
									if (strs.equals("否")) {
										cemsData.setIsStandard((short) 0);
									}
								}
								break;
							case 11://備註
								j += 1;
								if (!strs.equals("null")) {
									cemsData.setMemo(strs);
								}
								break;
						}
					}
					if (BeanUtils.isNotEmpty(cemsData.getFactoryId())) {
						cemsData.setCreateTime(new Date());
						cemsData.setCreateBy(userId);
						cemsData.setUpdateBy(userId);
						cemsData.setUpdateTime(new Date());
						cemsData.setId(UniqueIdUtil.genId());
						cemsDataMapper.add(cemsData);
					}
				}
				message = new ResultMessage(ResultMessage.Success, "上傳數據成功");
			}
		}catch(Exception e){
			e.printStackTrace();
			message=new ResultMessage(ResultMessage.Fail, "上傳數據失敗");
		}
		return message;
	}

	public static List<List<String>> readExcel(File excel) throws Exception, InvalidFormatException {
		List<List<String>> lists = new ArrayList<List<String>>();
		InputStream is = null;
		try {
			is = new FileInputStream(excel);
			Workbook wb = WorkbookFactory.create(is);
			int length = wb.getNumberOfSheets();
			Sheet sheet = wb.getSheetAt(0);
			for (Row row : sheet) {
				ArrayList<String> list = new ArrayList<String>();
				for (int i=0;i<15;i++) {
					Cell cell=row.getCell(i);
					if (cell == null || cell.toString().trim().equals("")) {
						list.add("null");
						continue;
					}
					int cellType = cell.getCellType();
					String cellValue = "";
					switch (cellType) {
						case Cell.CELL_TYPE_STRING: // 字符串類型
							cellValue = cell.getStringCellValue().trim();
							break;
						case Cell.CELL_TYPE_BOOLEAN: // 布爾類型
							cellValue = String.valueOf(cell.getBooleanCellValue());
							break;
						case Cell.CELL_TYPE_NUMERIC: // 數值類型
							SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
							if(HSSFDateUtil.isCellDateFormatted(cell)){
								Date time=cell.getDateCellValue();
								cellValue=sdf.format(time);
							}else{
								cellValue = new DecimalFormat("#.######").format(cell.getNumericCellValue());
							}
							break;
						default: // 其它類型
							cellValue = "null";
							break;
					}
					list.add(cellValue);
				}
				lists.add(list);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (is != null)
					is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return lists;
	}

	private String checkIsImport(List<List<String>> lists,Long userId) {
		String check="";
		int i=0;
		for (List<String> list : lists) {
			boolean hasFac=false;
			if(i==0){
				i++;
				continue;
			}
			i++;
			int j=0;
			String factoryName="";
			for (String strs : list) {
				switch (j) {
					case 0://企業代碼
						j += 1;
						if (!strs.equals("null")) {
							Station factory = stationService.getByCode(strs);
							if (BeanUtils.isEmpty(factory)) {
								check+="無"+strs+"企業;";
							}else{
								List<Station> facList = stationService.getListByUserIdAndParam(userId, "isCems", "1");
								for (Station fac : facList) {
									if (fac.getCode().equals(strs)) {
										hasFac = true;
									}
								}
								if(hasFac==false){
									check+="無錄入"+strs+"數據的權限;";
								}
							}
						}
						break;
					case 1:
						j += 1;
						if (!strs.equals("null")) {
							factoryName=strs;
						}
						break;
					case 2://排口編號
						j += 1;
						if (!strs.equals("null")) {
							Station emi=stationService.getByCode(strs);
							if(BeanUtils.isEmpty(emi)){
								check+="無"+strs+"排口;";
							}
						}
						break;
					case 3:
						j += 1;
						break;
					case 4://採集時間
						j += 1;
						break;
					case 5://煙塵
						j += 1;
						break;
					case 6://二氧化硫
						j += 1;
						break;
					case 7://氮氧化物
						j += 1;
						break;
					case 8://VOCs
						j += 1;
						break;
					case 9://當日排放量
						j += 1;
						break;
					case 10://小時均值是否達標
						j += 1;
						break;
					case 11://備註
						j += 1;
						break;
				}
			}
		}
		return check;
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章