poi技术将excel中的数据导入到MySQL数据库

将excel表格中数据导入MySQL数据库中

思路:创建模板 -> 下载模板 -> 填写内容 -> 导入数据(将导入失败的数据在页面中提示)

1. 创建excel模板(template.xlsx)

1.1 模板内容如图:
poi技术将excel中的数据导入到MySQL数据库_第1张图片

1.2.将该模板放到静态资源static下,New一个Folder(excel),如图:
poi技术将excel中的数据导入到MySQL数据库_第2张图片

2. 编写下载模板页面,填写数据后,导入

2.1 页面效果图:
poi技术将excel中的数据导入到MySQL数据库_第3张图片
2.2 填写数据
poi技术将excel中的数据导入到MySQL数据库_第4张图片
2.3 页面(import_excel_page.ftl)代码




    
    
    poi技术
    
    
     
    
    
    
    
  


    
poi技术
1、点击右侧下载模板,从第2行开始录入数据。 Excel模板下载
2、excel模板中有必填项为空时,将导入失败

2.4 引入poi依赖


		    org.apache.poi
		    poi
		    3.9
		
		
		    org.apache.poi
		    poi-examples
		    3.9
		
		
		    org.apache.poi
		    poi-excelant
		    3.9
		
		
		    org.apache.poi
		    poi-ooxml
		    3.9
		
		
		    org.apache.poi
		    poi-ooxml-schemas
		    3.9
		
		
		    org.apache.poi
		    poi-scratchpad
		    3.9
		

2.5 编写Java代码

/**
	 * 
	* @Title: import_excel_page 
	* @Description: 跳转到import_excel_page页面
	* @return 
	* @author 大都督
	* @date 2018年12月12日
	* @return String
	 */
	@RequestMapping("/import_excel_page")
	public String import_excel_page() {
		return "import_excel/import_excel_page";
	}
	/**
	 * 
	* @Title: batch_import_express 
	* @Description: 批量导入
	* @param file
	* @param request
	* @return
	* @throws Exception 
	* @author 大都督
	* @date 2018年12月13日
	* @return MessageInfo
	 */
	@RequestMapping(value = "/batch_import")  
    @ResponseBody  
    public MessageInfo batch_import_express(@RequestParam(value ="excel_file")MultipartFile file,HttpServletRequest request)throws Exception{  
		if(null == file){  
	        return ResultInfo.tips("文件为空,请选择文件");
	    }  
	    String fileName=file.getOriginalFilename();  
	    if(!ExcelImportUtils.validateExcel(fileName)){  
	    	return ResultInfo.tips("文件必须是excel格式");
	    }  
	    long size=file.getSize();  
	    if(StringUtils.isEmpty(fileName) || size==0){  
	    	return ResultInfo.tips("文件不能为空");
	    }  
	    
	    String result_str = batchImport(fileName,file);
	    if(StringUtils.isEmpty(result_str)){
	    	return ResultInfo.success();
	    }else{
	    	String a ="其它正常数据已导入;异常数据信息请修改后重新导入。异常数据参照下方提示#";
	    	return ResultInfo.tips(a+result_str);
	    }
       
    }
	public String batchImport(String fileName,MultipartFile mfile){  
		String pictures_url =   "E:\\fileupload";
		System.out.println(pictures_url);
	       File uploadDir = new  File(pictures_url); //"E:\\fileupload"
	       //创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。)  
	       if (!uploadDir.exists()) uploadDir.mkdirs();  
	       //新建一个文件  
	       File tempFile = new File(pictures_url + new Date().getTime() + ".xlsx");   
	       //初始化输入流  
	       InputStream is = null;    
	       try{  
	           //将上传的文件写入新建的文件中  
	           mfile.transferTo(tempFile);  
	             
	           //根据新建的文件实例化输入流  
	           is = new FileInputStream(tempFile);  
	             
	           //根据版本选择创建Workbook的方式  
	           Workbook wb = null;  
	           //根据文件名判断文件是2003版本还是2007版本  
	           if(ExcelImportUtils.isExcel2007(fileName)){  
	              wb = new XSSFWorkbook(is);   
	           }else{  
	              wb = new HSSFWorkbook(is);   
	           }  
	           //根据excel里面的内容读取知识库信息  
	           return readExcelValue(wb,tempFile);  
	      }catch(Exception e){  
	          e.printStackTrace();  
	      } finally{  
	          if(is !=null)  
	          {  
	              try{  
	                  is.close();  
	              }catch(IOException e){  
	                  is = null;      
	                  e.printStackTrace();    
	              }  
	          }  
	      }  
	       return "导入出错!请检查数据格式!";  
	   }
	private String readExcelValue(Workbook wb,File tempFile){  
		 
	       //错误信息接收器  
	       String errorMsg = "";  
	       //得到第一个shell    
	       Sheet sheet=wb.getSheetAt(0);  
	       //得到Excel的行数  
	       int totalRows=sheet.getLastRowNum();  
	       //总列数  
	       int totalCells = 0;   
	       //得到Excel的列数(前提是有行数),从第二行算起  
	       if(totalRows>=1 && sheet.getRow(0) != null){  
	            totalCells=sheet.getRow(0).getPhysicalNumberOfCells();  
	       }  
	       String br = "";  
	       
	       //循环Excel行数,从第二行开始。标题不入库  
	       for(int r=1;r<=totalRows;r++){  
	           String rowMessage = "";  
	           Row row = sheet.getRow(r);  
	           if (row == null){  
	               errorMsg += br+"第"+(r+1)+"行数据有问题,请仔细检查!#";  
	               continue;  
	           }  
	           
	           String userName = "";  
	           String age = "";
	           
	           //循环Excel的列  
	           for(int c = 0; c 

3. 测试结果

3.1 页面效果图:

你可能感兴趣的:(后端)