java实现excle文件上传,解析
//主页面
<input class="btn btn-primary" id="importFile" type="button" value="导入" style="outline: none;margin-bottom:2px;margin-top:2px;margin-right:10px;height: 26px;padding-top: 2px;" onclick="importFileInput()" /> function importFileInput){ layui.use('layer', function(){ layer.ready(function(){ var layer = layui.layer; layer.config({ extend: 'mySkin/mySkin.css' //加载您的扩展样式 }); layer.open({ skin: 'layui-layer-ljc', type: 2, title:'弹出窗右上角名字', area: ['570px', '220px'], offset: maxHeight, shade: [0.3, '#ccc'], shadeClose: false, content:"后台上传地址", btn: ['导入', '取消'], btnAlign: 'c',//按钮居中 yes:function(index,layero){ var paddingHeight=maxHeight+80, file=$(layero).find("iframe")[0].contentWindow.uploadFile,//文件 ret=$(layero).find("iframe")[0].contentWindow.importPo(); if(ret==false){ layer.msg('请选择导入文件!', {offset: paddingHeight,icon: 7}); return false; } layer.close(index); var indexLoad =layer.load(2,{ offset: maxHeight, shade: [0.3, '#ccc'], shadeClose: false, }); importDateFunction(file); } }); $(':focus').blur();//取消焦点 防止空格键、回车键二次触发点击事件 }); }); } function importDateFunction(file){ layui.use('layer', function(){ layer.ready(function(){ var layer = layui.layer; layer.config({ extend: 'mySkin/mySkin.css' //加载您的扩展样式 }); var form = new FormData(); form.append("file", file.files[0]); $.ajax({ type: "POST", url: "后台导入地址", data:form, async:true, processData:false,//这个很有必要,不然不行 contentType: false, // mimeType:"multipart/form-data", success: function(data){ layer.close(indexLoad); if(data.fileIsNull == true){ layer.msg('导入文件不能为空!', {offset:maxHeight,icon: 7}); return false; }if(data.list.length>0){ for (var i = 0; i < data.list.length; i++) { //遍历表格 addnewrecord(data.list[i],"new",1); } if(promptInfo != ""){ layer.msg('导入成功'+data.list.length+'条!'+promptInfo, {offset:maxHeight,icon: 1}); }else{ layer.msg('导入成功!共计'+data.list.length+'条!', {offset:maxHeight,icon: 1}); } }else{ if(promptInfo != ""){ layer.msg('导入失败!'+promptInfo, {offset:maxHeight,icon: 7}); }else{ layer.msg('导入失败!', {offset:maxHeight,icon: 7}); } } }, error:function(e) {} }); return false; }); }); } //弹出窗 <form:form id="inputForm" modelAttribute="实体名" action="" method="post" class="form-search" enctype="multipart/form-data"> <sys:message content="${message}"/> <table class="table table-striped table-condensed"> <tr> <td class="tdcss">文件:</td> <td class="curWidth"> <input id="uploadFile" name="file" type="file"/> <div style='margin-top: 5px'> <font color="red">重要提示:</font><br>1.*****<br>2.*****! </div>
</td> </tr> </table> </form:form> function importPo(){ var val = $("#uploadFile").val(); if(''==val){ return false; }else{ return true; } }
import org.apache.poi.* import org.apache.commons.* /** * 后台导入 * @param file * @param officeId 页面表格中含有数据 部门id * @param officeIds 导入人员所有的部门权限 部门id:"id1,id2.." * @param redirectAttributes * @return */ @RequestMapping(value = "import", method=RequestMethod.POST) @ResponseBody public Map<String, Object> importFile(MultipartFile file,@RequestParam String officeId,@RequestParam String officeIds,RedirectAttributes redirectAttributes) { int totalNum=0; boolean importUserPermissions=false; boolean officeTableTag=false; boolean officeTag=false; boolean mounthTypeTag=false; boolean fileIsNull=true; String mounthLenInfo=""; String errLenInfo=""; String companyName=""; String errempLenInfo=""; String errmoneyLenInfo=""; String errawardLenInfo=""; String errMonthLenInfo=""; String errNoteLenInfo=""; Map<String, Object> vars = Maps.newHashMap(); List<SysIncentivePaymentDetail> list = new ArrayList<SysIncentivePaymentDetail>(); try { Workbook workBook = getWorkBook(file); //文件包含多个sheet for (int i = 0; i < workBook.getNumberOfSheets(); i++) { //Sheet sheetAt = workBook.getSheetAt(i);//sheet个数 Sheet sheetAt; if (workBook instanceof SXSSFWorkbook) { SXSSFWorkbook sxssfWorkbook = (SXSSFWorkbook) workBook; sheetAt = sxssfWorkbook.getXSSFWorkbook().getSheetAt(i); } else { sheetAt = workBook.getSheetAt(i); } int lastRowNum = sheetAt.getPhysicalNumberOfRows();//每个sheet里总行数 if(lastRowNum >1) { String officeIdTag="";//导入文件中部门id String DatePattern = "^(?:([0-9]{4}-(?:(?:0?[1,3-9]|1[0-2])|(?:0?[13578]|1[02])))|([0-9]{4}-(?:0?[1-9]|1[0-2])))$"; Pattern p = Pattern.compile(DatePattern); for (int m = 1; m < lastRowNum; m++) {//第一行是表头,所以不要,m从1开始 int len=m+1; Row row = sheetAt.getRow(m); boolean emptyRow = isEmptyRow(row); if(!emptyRow && row != null) { fileIsNull=false; boolean lenDate=true; Iterator<Cell> it = row.iterator(); while (it.hasNext()) { Cell cell = it.next(); /* CELL_TYPE_NUMERIC = 0; // 数值类型 CELL_TYPE_STRING = 1; // 字符串类型 CELL_TYPE_FORMULA = 2; // 公式类型 CELL_TYPE_BLANK = 3; // 空格类型 CELL_TYPE_BOOLEAN = 4; // 布尔类型 CELL_TYPE_ERROR = 5; // 错误 */ if (cell.getCellType() == Cell.CELL_TYPE_BLANK) {//非空校验 if(cell.getColumnIndex() == 0) {//第一列 if(errempLenInfo.equals("")) { errempLenInfo=len+""; }else { errempLenInfo=errempLenInfo+"、"+len; } }else if(cell.getColumnIndex() == 1) {//第二列 if(errmoneyLenInfo.equals("")) { errmoneyLenInfo=len+""; }else { errmoneyLenInfo=errmoneyLenInfo+"、"+len; } }else if(cell.getColumnIndex() == 2) {//第三列 if(errawardLenInfo.equals("")) { errawardLenInfo=len+""; }else { errawardLenInfo=errawardLenInfo+"、"+len; } }else if(cell.getColumnIndex() == 3) {//第四列 if(errMonthLenInfo.equals("")) { errMonthLenInfo=len+""; }else { errMonthLenInfo=errMonthLenInfo+"、"+len; } }else if(cell.getColumnIndex() == 4) {//第五列 if(errNoteLenInfo.equals("")) { errNoteLenInfo=len+""; }else { errNoteLenInfo=errNoteLenInfo+"、"+len; } } if(errLenInfo.equals("")) { errLenInfo=len+""; }else { errLenInfo=errLenInfo+"、"+len; } lenDate=false; } } if(!lenDate) { continue; } SysIncentivePaymentDetail sysIncentivePaymentDetail = new SysIncentivePaymentDetail(); //第1列:row.getCell(0).getNumericCellValue() String oaId=""; if(row.getCell(0).getCellType()==Cell.CELL_TYPE_NUMERIC) { oaId=row.getCell(0).getNumericCellValue()+""; oaId=oaId.substring(0, oaId.indexOf(".")); }else if(row.getCell(0).getCellType()==Cell.CELL_TYPE_STRING) { oaId=row.getCell(0).getStringCellValue().replaceAll(" ", ""); } SysHumanResources obj=sysHumanResourcesService.getInfoByEmpNumber(oaId); sysIncentivePaymentDetail.setName(obj.getName()); sysIncentivePaymentDetail.setEmpnumber(oaId); sysIncentivePaymentDetail.setOffice(obj.getOffice()); if(!officeIdTag.equals("") && !officeIdTag.equals(obj.getOffice().getId())) { officeTableTag=true;//用于校验导入文件信息中 部门是否一致 部门不一致 break; } //第2列: row.getCell(1).getStringCellValue().replaceAll(" ", "") String totalmoney=""; if(row.getCell(1).getCellType()==Cell.CELL_TYPE_NUMERIC) { totalmoney=row.getCell(1).getNumericCellValue()+""; }else if(row.getCell(1).getCellType()==Cell.CELL_TYPE_STRING) { totalmoney=row.getCell(1).getStringCellValue().replaceAll(" ", ""); } sysIncentivePaymentDetail.setTotalmoney(totalmoney); //第3列: row.getCell(2).getStringCellValue().replaceAll(" ", "") String prize=""; if(row.getCell(2).getCellType()==Cell.CELL_TYPE_NUMERIC) { prize=row.getCell(2).getNumericCellValue()+""; }else if(row.getCell(2).getCellType()==Cell.CELL_TYPE_STRING) { prize=row.getCell(2).getStringCellValue().replaceAll(" ", ""); } sysIncentivePaymentDetail.setPrize(prize); //第4列: row.getCell(3).getStringCellValue().replaceAll(" ", "") String issueMonth=""; if(row.getCell(3).getCellType()==Cell.CELL_TYPE_NUMERIC) { issueMonth=row.getCell(3).getNumericCellValue()+""; }else if(row.getCell(3).getCellType()==Cell.CELL_TYPE_STRING) { issueMonth=row.getCell(3).getStringCellValue().replaceAll(" ", ""); } if(issueMonth.length()>6) { String mounthInfo = issueMonth.substring(0, 7); Matcher matcher = p.matcher(mounthInfo); if (matcher.matches()) {//日期格式正确 sysIncentivePaymentDetail.setIssueMonth(mounthInfo); }else { //日期格式不正确 mounthTypeTag=true; if(mounthLenInfo.equals("")) { mounthLenInfo=len+""; }else { mounthLenInfo=mounthLenInfo+"、"+len; } } }else { //日期格式不正确 mounthTypeTag=true; if(mounthLenInfo.equals("")) { mounthLenInfo=len+""; }else { mounthLenInfo=mounthLenInfo+"、"+len; } } //第5列: row.getCell(4).getStringCellValue().replaceAll(" ", "") String remarks=""; if(row.getCell(4).getCellType()==Cell.CELL_TYPE_NUMERIC) { remarks=row.getCell(4).getNumericCellValue()+""; }else if(row.getCell(4).getCellType()==Cell.CELL_TYPE_STRING) { remarks=row.getCell(4).getStringCellValue().replaceAll(" ", ""); } sysIncentivePaymentDetail.setRemarks(remarks); totalNum++; list.add(sysIncentivePaymentDetail); if(list.size()>0) { officeIdTag=list.get(0).getOffice().getId(); } } } if(!officeTableTag && mounthLenInfo.equals("")) {// //页面中原有数据部门id:officeId 导入文件中部门id:officeIdTag if(officeId!=null && !officeId.equals("") && !officeId.equals(officeIdTag)) { officeTag=true; } if(officeIds.indexOf(officeIdTag)<0) { //导入信息中人员所在部门,超出导入人的部门权限 importUserPermissions=true; Office company = officeService.get(officeIdTag); companyName=company.getName(); } } } } } catch (Exception e) { e.printStackTrace(); } vars.put("list", list); vars.put("mounthTypeTag", mounthTypeTag); vars.put("mounthLenInfo", mounthLenInfo); vars.put("errLenInfo", errLenInfo); vars.put("companyName", companyName); vars.put("importUserPermissions", importUserPermissions); vars.put("officeTableTag", officeTableTag); vars.put("officeTag", officeTag); vars.put("totalNum", totalNum); vars.put("fileIsNull", fileIsNull); vars.put("errempLenInfo", errempLenInfo); vars.put("errmoneyLenInfo", errmoneyLenInfo); vars.put("errawardLenInfo", errawardLenInfo); vars.put("errMonthLenInfo", errMonthLenInfo); vars.put("errNoteLenInfo", errNoteLenInfo); return vars; } public static boolean isEmptyRow(Row row) { if (row == null || row.toString().isEmpty()) { return true; } else { int count=0; int rowCount=row.getLastCellNum()-row.getFirstCellNum(); Iterator<Cell> it = row.iterator(); //boolean isEmpty = true; while (it.hasNext()) { Cell cell = it.next(); if (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK || StringUtils.isEmpty((cell+"").trim())){ count += 1; } } if (count == rowCount) { return true; } return false; } } public static Workbook getWorkBook(MultipartFile file) { //获得文件名 String fileName = file.getOriginalFilename(); //创建Workbook工作薄对象,表示整个excel Workbook workbook = null; try { //获取excel文件的io流 InputStream is = file.getInputStream(); //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象 if(fileName.endsWith("xls")){ //2003 POIFSFileSystem poifsFileSystem = new POIFSFileSystem(is); workbook = new HSSFWorkbook(poifsFileSystem); }else if(fileName.endsWith("xlsx")){ //2007 及2007以上 workbook = new XSSFWorkbook(is); } } catch (IOException e) { e.printStackTrace(); } return workbook; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律