zoukankan      html  css  js  c++  java
  • SSM excel文件的导入导出

      对于excel文件的导入导出,后台接收读取和建表封存都是固定死的,所以对于excel导入时,excel文件内容必须匹配后台相关对象,不然报错。

      excel文件导出,用<a><a/>标签即可,通过后台去完成 ,不可用ajax去写导出,ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。

    文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件。

    当获取前台导入这个命令后,会通过Mybatis获取mysql数据库所有相关数据,通过for循环将获取集合中一个个对象及对象属性写入表中,导出。

      对于excel文件的导入则是可以通过form表单和ajax两种方法导入,前者在controller控制器里面返回字符串,会直接显示在页面上,需要手动重新刷新页面。

    后者……,虽然很想使用,但网上并没有找到有关纯ajax写入后台的案例,不过有几类别人封装好的ajax插件用于写入excel文件的,有兴趣可以去找找。

    文件上传,控制台获取到文件,读取文件里面value值,封存到其对象中,通过Mybatis保存数据库中。(UPDATE good SET g_id = UUID(),mybatis添加对象时uuid为主键,只要mysql主键为String类型长度足够容纳uuid自动生成长度)

    <!-- html -->
    <!-- excel文件导出 -->
    <p><a href="${pageContext.request.contextPath}/user/exportExcel">导出</a>
    <!-- excel文件导入 -->
    <form action="${pageContext.request.contextPath}/user/importExcel" method="post" enctype="multipart/form-data">
    	<input type="file" name="userExcel" />
    	<input type="submit" value="导入">
    </form>
    
    //控制层
    //导出excel文档 @RequestMapping("/exportExcel") @ResponseBody public void exportExcel(HttpServletRequest request,HttpServletResponse response){ try { //获取数据源 List<User> userList = userService.queryUserAll(); //导出excel response.setHeader("Content-Disposition","attachment;filename="+new String("用户信息.xls".getBytes(),"ISO-8859-1")); response.setContentType("application/x-excel;charset=UTF-8"); OutputStream outputStream = response.getOutputStream(); //导出 userService.exportExcel(userList,outputStream); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } }
    //导入
    	@RequestMapping("/importExcel")
    	//@ResponseBody
    	public String importExcel(MultipartFile userExcel,HttpServletRequest request,HttpSession session){
    		if(userExcel == null){
    			session.setAttribute("excelName", "未上传文件,上传失败!");
    			return "redirect:queryUserAll";
    		}
    		String userExcelFileName = userExcel.getOriginalFilename();
    		if(!userExcelFileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){
    			session.setAttribute("excelName", "文件格式不正确!请使用.xls或.xlsx后缀的文档,导入失败!");
    			return "redirect:queryUserAll";
    		}
    		//导入
    		try {
    			userService.importExcel(userExcel);
    		} catch (IOException | InvalidFormatException e) {
    			e.printStackTrace();
    		}
    		session.setAttribute("excelName", "导入成功!");
    		return "redirect:queryUserAll";
    	}
    
    //service层
    //导出 @Override public void exportExcel(List<User> userList, OutputStream outputStream) throws IOException { //1.创建工作簿 HSSFWorkbook hwb =new HSSFWorkbook(); //1.1创建合并单元格 //CellRangeAddress cellRangeAddress =new CellRangeAddress(0,0,0,4); //2.创建工作表 HSSFSheet sheet = hwb.createSheet("用户信息表"); //2.1添加合并单元格 //sheet.addMergedRegion(cellRangeAddress); //3.1创建第一行及单元格 HSSFRow row1 = sheet.createRow(0); HSSFCell cell1 = row1.createCell(0); cell1.setCellValue("用户信息"); //3.2创建第二行及单元格 HSSFRow row2 = sheet.createRow(1); String[] row2Cell = {"编号","姓名","性别","年龄","部门名称"}; for (int i =0 ; i < row2Cell.length ; i++ ){ row2.createCell(i).setCellValue(row2Cell[i]); } //3.3创建第三行及单元格 if(userList!= null && userList.size()>0){ for(int j=0 ; j<userList.size() ;j++){ HSSFRow rowUser = sheet.createRow(j+2); rowUser.createCell(0).setCellValue(userList.get(j).getId()); rowUser.createCell(1).setCellValue(userList.get(j).getName()); rowUser.createCell(2).setCellValue(userList.get(j).getSex()); rowUser.createCell(3).setCellValue(userList.get(j).getAge()); //rowUser.createCell(4).setCellValue(userList.get(j).getId()); } } //5.输出 hwb.write(outputStream); }

      

    //导入
    @Override
    	public void importExcel(MultipartFile userExcel) throws IOException, InvalidFormatException {
    		//获取输入流
    		InputStream inputStream = userExcel.getInputStream();
    		//创建读取工作簿
    		Workbook workbook = WorkbookFactory.create(inputStream);
    		//获取工作表
    		Sheet sheet = workbook.getSheetAt(0);
    		//获取总行
    		int rows=sheet.getPhysicalNumberOfRows();
    		if(rows>2){
    			//获取单元格
    			for (int i = 2; i < rows; i++) {
    				Row row = sheet.getRow(i);
    				User user =new User();
    				
    				try {
    					String id = row.getCell(0).getStringCellValue();
    					user.setId(Integer.parseInt(id));
    				} catch (IllegalStateException e) {
    					int id=(int)row.getCell(0).getNumericCellValue();
    					user.setId(id);
    				}
    				
    				String name = row.getCell(1).getStringCellValue();
    				user.setName(name);
    				
    				String sex = row.getCell(2).getStringCellValue();
    				user.setSex(sex);
    				
    				try {
    					String age = row.getCell(3).getStringCellValue();
    					user.setAge(Integer.parseInt(age));
    				} catch (IllegalStateException e) {
    					int age=(int)row.getCell(3).getNumericCellValue();
    					user.setAge(age);
    				}
    				//想数据库中添加新对象
    				addUser(user);//方法
    			}
    			
    		}
    		
    		inputStream.close();
    	}
    

      

      

  • 相关阅读:
    Mkdocs文档生成
    IntelliJ IDEA
    WPS中页眉设置
    ubuntu下的画图工具-dia
    接口测试详细过程
    ubuntu下安装jmeter
    互联网产品接入支付功能如何测试?
    Uiautomator自动化测试编写和调试
    Ubuntu下配置android环境
    UIAutomator环境配置与运行
  • 原文地址:https://www.cnblogs.com/colourless/p/10012253.html
Copyright © 2011-2022 走看看