日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot+POI实现导入Excel时验证并返回错误Cell标红的文件

發布時間:2025/3/19 javascript 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot+POI实现导入Excel时验证并返回错误Cell标红的文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

SpringBoot中使用POI實現Excel導入到數據庫(圖文教程已實踐):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/88660466

在Excel導入到數據庫后進行格式驗證,如果有錯誤則將錯誤的Cell標紅然后驗證完成后

將標紅的Excel下載到客戶端。

實現

js中發送請求

//解析Excel操作 function parseExcel(){var url = "/wmsReceiveOrder/parseExcel";$.ajax({type: 'POST',url: url,cache: false,? //禁用緩存contentType: false,dataType: "json",processData:false,success: function (result) {//250則為驗證不通過則下載不正確的excelif(result.statusCode=="250"){alert(result.message)window.location.href="/wmsReceiveOrder/downloadMistakeExcel";}else{alert(result.message)if(result.statusCode=="200"){window.location.reload()}}}})return false; }

后臺解析Excel的方法

?@Description("解析Excel")@ResponseBody@RequestMapping("/parseExcel")@Transactionalpublic Map<String, Object> parseExcel(HttpServletRequest request) {return receiveOrderService.parseExcel(request);}

serviceImpl

/**** 解析excel* @param request* @return*/@Override@Transactionalpublic Map<String, Object> parseExcel(HttpServletRequest request) {Map<String, Object> result = new HashMap<String, Object>();Workbook workbook = null;//驗證標識Boolean isValidatePass = true;//獲取文件路徑String path = (String)request.getSession().getAttribute("currFilePath");if(path==null||path==""){result.put("statusCode", "300");result.put("message", "請先上傳excel文件再導入");}else{//獲取文件格式String fileType = path.substring(path.lastIndexOf(".") + 1, path.length());try {InputStream stream = new FileInputStream(path);//如果后綴名為xls,使用HSSFif (fileType.equals("xls")) {workbook = new HSSFWorkbook(stream);//如果后綴名是xlsx,使用XSSF}else if (fileType.equals("xlsx")){workbook = new XSSFWorkbook(stream);}Sheet sheet= workbook.getSheet("sheet1");//獲取行數int rows=sheet.getPhysicalNumberOfRows();WmsReceiveOrder receiveOrder =new WmsReceiveOrder();//獲取第一行數據Row row1 =sheet.getRow(0);if(row1!=null){//獲取采購訂單號row1.getCell(1).setCellType(Cell.CELL_TYPE_STRING);String purchaseCode =row1.getCell(1).getStringCellValue();receiveOrder.setPurchaseCode(purchaseCode);}//獲取第二行數據Row row2 =sheet.getRow(1);if(row2!=null){//獲取供應商送貨單號row2.getCell(1).setCellType(Cell.CELL_TYPE_STRING);String deliveryCode =row2.getCell(1).getStringCellValue();receiveOrder.setDeliveryCode(deliveryCode);//日期格式加校驗Cell deliveryTimeCell = row2.getCell(3);if(deliveryTimeCell!=null){//如果是數值類型if(deliveryTimeCell.getCellType()==0){if(HSSFDateUtil.isCellDateFormatted(deliveryTimeCell)){//獲取送貨日期Date deliveryTime =deliveryTimeCell.getDateCellValue();receiveOrder.setDeliveryTime(deliveryTime);}else{//設置送貨時間為紅色CellStyle style =? workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.RED.getIndex());style.setFillPattern(CellStyle.SOLID_FOREGROUND);deliveryTimeCell.setCellStyle(style);isValidatePass=false;}}else{//設置送貨時間為紅色CellStyle style =? workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.RED.getIndex());style.setFillPattern(CellStyle.SOLID_FOREGROUND);deliveryTimeCell.setCellStyle(style);isValidatePass=false;}}//獲取供應商編號row2.getCell(5).setCellType(Cell.CELL_TYPE_STRING);String supplierCode =row2.getCell(5).getStringCellValue();receiveOrder.setSupplierCode(supplierCode);//獲取供應商名稱row2.getCell(6).setCellType(Cell.CELL_TYPE_STRING);String supplierName =row2.getCell(6).getStringCellValue();receiveOrder.setSupplierName(supplierName);}//獲取第三行數據Row row3 =sheet.getRow(2);if(row3!=null){//獲取ERP入貨單號row3.getCell(1).setCellType(Cell.CELL_TYPE_STRING);String erpInCode =row3.getCell(1).getStringCellValue();receiveOrder.setErpInCod(erpInCode);Cell inTimeCell= row3.getCell(3);//如果是數值類型if(inTimeCell!=null&&inTimeCell.getCellType()==0){if(HSSFDateUtil.isCellDateFormatted(inTimeCell)){//獲取入庫日期Date inTime =row3.getCell(3).getDateCellValue();receiveOrder.setInTime(inTime);}else{CellStyle style =? workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.RED.getIndex());style.setFillPattern(CellStyle.SOLID_FOREGROUND);inTimeCell.setCellStyle(style);isValidatePass=false;}}else{CellStyle style =? workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.RED.getIndex());style.setFillPattern(CellStyle.SOLID_FOREGROUND);inTimeCell.setCellStyle(style);isValidatePass=false;}}receiveOrder.setType(1);receiveOrder.setStatus("1");//校驗子表各條的數量以及生產日期以及物料編號是否存在for (int currentRow=4;currentRow<rows;currentRow++) {WmsReceiveOrderDetails wmsReceiveOrderDetails =new WmsReceiveOrderDetails();//獲取物料編號sheet.getRow(currentRow).getCell(1).setCellType(Cell.CELL_TYPE_STRING);String materielNumber = sheet.getRow(currentRow).getCell(1).getStringCellValue();//獲取生產日期Cell productDateCell= sheet.getRow(currentRow).getCell(4);//如果是數值類型if(productDateCell!=null&&productDateCell.getCellType()==0){if(!HSSFDateUtil.isCellDateFormatted(productDateCell)) {CellStyle style = workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.RED.getIndex());style.setFillPattern(CellStyle.SOLID_FOREGROUND);productDateCell.setCellStyle(style);isValidatePass = false;}}else{//設置生產日期為紅色CellStyle style =? workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.RED.getIndex());style.setFillPattern(CellStyle.SOLID_FOREGROUND);productDateCell.setCellStyle(style);isValidatePass=false;}//對數量進行驗證Cell numCell =sheet.getRow(currentRow).getCell(5);//如果是數值類型if(numCell!=null&&numCell.getCellType()==0){if(HSSFDateUtil.isCellDateFormatted(numCell)){//設置數量單元格為紅色CellStyle style =? workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.RED.getIndex());style.setFillPattern(CellStyle.SOLID_FOREGROUND);numCell.setCellStyle(style);isValidatePass=false;}else{if(!String.valueOf(numCell.getNumericCellValue()).contains(".0")){//設置數量單元格為紅色CellStyle style =? workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.RED.getIndex());style.setFillPattern(CellStyle.SOLID_FOREGROUND);numCell.setCellStyle(style);isValidatePass=false;}}}else{//設置為紅色CellStyle style =? workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.RED.getIndex());style.setFillPattern(CellStyle.SOLID_FOREGROUND);numCell.setCellStyle(style);isValidatePass=false;}//對物料編號進行驗證QueryWrapper<BusMaterielInfo> busMaterielInfoQueryWrapper =new QueryWrapper<BusMaterielInfo>();busMaterielInfoQueryWrapper.eq("materiel_number",materielNumber);BusMaterielInfo busMaterielInfo = busMaterielInfoMapper.selectOne(busMaterielInfoQueryWrapper);Cell materialNumberCell=sheet.getRow(currentRow).getCell(1);if(busMaterielInfo==null){CellStyle style =? workbook.createCellStyle();style.setFillForegroundColor(IndexedColors.RED.getIndex());style.setFillPattern(CellStyle.SOLID_FOREGROUND);materialNumberCell.setCellStyle(style);isValidatePass=false;}}//驗證完成if(!isValidatePass){//將錯誤文件下載result.put("statusCode", "250");result.put("message", "Excel存在錯誤(紅色部分)!");FileOutputStream fileOut = new FileOutputStream(path);workbook.write(fileOut);fileOut.close();}else {//查詢條件Map<String, Object> map = new HashMap<String, Object>();map.put("delivery_code", receiveOrder.getDeliveryCode());map.put("supplier_code", receiveOrder.getSupplierCode());List<WmsReceiveOrder> wmsReceicveOrderList = wmsReceiveOrderMapper.selectByMap(map);if (wmsReceicveOrderList.size() == 0 || wmsReceicveOrderList == null) {boolean isSaveReceiveOrder = false;//如果前面主表驗證通過則插入主表if (isValidatePass) {//插入receiveOrder表數據isSaveReceiveOrder = this.save(receiveOrder);}List<WmsReceiveOrderDetails> receiveOrderDetailsList = new ArrayList<WmsReceiveOrderDetails>();if (isSaveReceiveOrder) {//如果插入表頭成功,獲取插入數據的ID并插入詳情表Long receiveId = receiveOrder.getId();for (int currentRow = 4; currentRow < rows; currentRow++) {WmsReceiveOrderDetails wmsReceiveOrderDetails = new WmsReceiveOrderDetails();wmsReceiveOrderDetails.setReceiveId(receiveId);//獲取物料編號sheet.getRow(currentRow).getCell(1).setCellType(Cell.CELL_TYPE_STRING);String materielId = sheet.getRow(currentRow).getCell(1).getStringCellValue();wmsReceiveOrderDetails.setMaterielNumber(materielId);//獲取物料名稱sheet.getRow(currentRow).getCell(2).setCellType(Cell.CELL_TYPE_STRING);String materielName = sheet.getRow(currentRow).getCell(2).getStringCellValue();wmsReceiveOrderDetails.setMaterielName(materielName);//獲取供應商批次sheet.getRow(currentRow).getCell(3).setCellType(Cell.CELL_TYPE_STRING);String supplierBatch = sheet.getRow(currentRow).getCell(3).getStringCellValue();wmsReceiveOrderDetails.setSupplierBatch(supplierBatch);//獲取生產日期Date productDate = sheet.getRow(currentRow).getCell(4).getDateCellValue();wmsReceiveOrderDetails.setProductDate(productDate);//獲取數量sheet.getRow(currentRow).getCell(5).setCellType(Cell.CELL_TYPE_STRING);Long num = Long.parseLong(sheet.getRow(currentRow).getCell(5).getStringCellValue());wmsReceiveOrderDetails.setNum(num);//獲取托盤編號String salverCode = sheet.getRow(currentRow).getCell(6).getStringCellValue();wmsReceiveOrderDetails.setSalverCode(salverCode);wmsReceiveOrderDetails.setStatus("0");receiveOrderDetailsList.add(wmsReceiveOrderDetails);}if (receiveOrderDetailsList != null) {for (WmsReceiveOrderDetails wmsReceiveOrderDetails : receiveOrderDetailsList) {boolean isSaveReceiveOrderDetails = wmsReceiveOrderDetailsService.save(wmsReceiveOrderDetails);if (!isSaveReceiveOrderDetails) {result.put("statusCode", "300");result.put("message", "導入物料編號為:" + wmsReceiveOrderDetails.getMaterielNumber() + "出錯了!");} else {if (isValidatePass == true) {result.put("statusCode", "200");result.put("message", "導入收貨單成功!");} else {result.put("statusCode", "300");result.put("message", "導入收貨單失敗!");}}}}} else {result.put("statusCode", "300");result.put("message", "導入收貨單失敗!");}} else {//是否已經導入過判斷結束result.put("statusCode", "300");result.put("message", "此收貨單已經導入,請勿重復導入!!");}}//驗證通過后的插入數據庫} catch (FileNotFoundException e) {e.printStackTrace();result.put("statusCode", "300");result.put("message", e.toString());} catch (IOException e) {e.printStackTrace();result.put("statusCode", "300");result.put("message", e.toString());}}//判斷是否已經上傳文件return result;}

錯誤excel文件下載方法

?@Description("錯誤Excel下載")@RequestMapping("/downloadMistakeExcel")public String downloadMistakeExcel(HttpServletRequest request, HttpServletResponse response) {String path = (String)request.getSession().getAttribute("currFilePath");if (path != null) {//設置文件路徑File file = new File(path);if (file.exists()) {//時間格式化格式SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyyMMddHHmmss");//獲取當前時間并作為時間戳String timeStamp=simpleDateFormat.format(new Date());response.setContentType("application/force-download");// 設置強制下載不打開response.addHeader("Content-Disposition", "attachment;fileName="+timeStamp+"mistake.xlsx" );// 設置文件名byte[] buffer = new byte[1024];FileInputStream fis = null;BufferedInputStream bis = null;try {fis = new FileInputStream(file);bis = new BufferedInputStream(fis);OutputStream os = response.getOutputStream();int i = bis.read(buffer);while (i != -1) {os.write(buffer, 0, i);i = bis.read(buffer);}System.out.println("success");} catch (Exception e) {e.printStackTrace();} finally {if (bis != null) {try {bis.close();} catch (IOException e) {e.printStackTrace();}}if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}}return null;}

流程圖

總結

以上是生活随笔為你收集整理的SpringBoot+POI实现导入Excel时验证并返回错误Cell标红的文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人与动物2免费观看完整版电影高清 | 精彩视频一区二区 | 欧美日韩国产在线一区 | 播放灌醉水嫩大学生国内精品 | 91色在线视频 | 中国少妇乱子伦视频播放 | 天天射综合 | 日本a天堂| 一区二区免费在线观看 | 精品伦精品一区二区三区视频 | 色婷婷在线影院 | 天堂影视在线观看 | 思思99热 | 夜夜嗨aⅴ一区二区三区 | 九月婷婷综合 | 免费视频福利 | 国产精品-色哟哟 | 一卡二卡国产 | 人妖交videohd另类 | 91人人爱| 欧美精品一区二区三区四区 | aaaaaabbbbbb毛片 | 婷婷啪啪 | 综合图区亚洲 | 日视频| 夜夜嗨av一区二区三区四区 | 国产a三级| 国产色自拍 | 人妖粗暴刺激videos呻吟 | 亚洲AV成人无码一二三区在线 | 欧美性极品| 黄色免费91 | 97成人超碰 | 欧美久久久精品 | 少妇超碰 | 日本在线视频观看 | 成年人在线观看av | 中文字幕在线观看第二页 | 台湾chinesehdxxxx少妇 | 国产淫视 | 中文字幕11页中文字幕11页 | 五月婷丁香 | 亚洲第十页 | 国产美女一级视频 | 日韩精品一区二区三区色欲av | 91精品视频免费观看 | 国产视频久久 | 亚洲国产一区视频 | 国产91精品久久久 | 99热激情| 成人h在线观看 | 日韩少妇 | 亚洲精品91天天久久人人 | 亚洲精品无 | 综合网久久 | 黄色成人影视 | 波多野结衣中文字幕在线 | av资源在线看 | 亚洲AV午夜精品 | 日韩在观看线 | 国产精品视频入口 | 亚洲av综合色区无码一区爱av | 欧美国产精品久久 | 国内自拍真实伦在线观看 | 天堂一区在线 | 91影院在线观看 | 欧美在线黄色 | 青青导航 | 一本一道久久a久久综合蜜桃 | 亚洲av首页在线 | 在线不卡一区二区 | av中文字幕av | 午夜一级片 | 人妻 丝袜美腿 中文字幕 | 青青草原影视 | 亚洲欧美v | 天堂男人av| 黄色大尺度视频 | 91综合精品 | 国产精品久久久久久久久久直播 | 国产图片一区 | 欧美乱视频| 精品电影在线观看 | 中文在线字幕观看 | 伊人久久久久噜噜噜亚洲熟女综合 | 中文字幕第15页 | 91蝌蚪在线 | 中国老太婆性视频 | 黑丝久久 | 在线观看日韩国产 | 亚洲少妇xxx | 色呦呦在线视频 | 中国白嫩丰满人妻videos | 白浆导航| 天天草综合 | 九色国产 | 污污视频在线观看免费 | 精品福利三区3d卡通动漫 | 日本美女视频网站 |