对于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自动生成长度)

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

  

  1. //导入
  2. @Override
  3. public void importExcel(MultipartFile userExcel) throws IOException, InvalidFormatException {
  4. //获取输入流
  5. InputStream inputStream = userExcel.getInputStream();
  6. //创建读取工作簿
  7. Workbook workbook = WorkbookFactory.create(inputStream);
  8. //获取工作表
  9. Sheet sheet = workbook.getSheetAt(0);
  10. //获取总行
  11. int rows=sheet.getPhysicalNumberOfRows();
  12. if(rows>2){
  13. //获取单元格
  14. for (int i = 2; i < rows; i++) {
  15. Row row = sheet.getRow(i);
  16. User user =new User();
  17.  
  18. try {
  19. String id = row.getCell(0).getStringCellValue();
  20. user.setId(Integer.parseInt(id));
  21. } catch (IllegalStateException e) {
  22. int id=(int)row.getCell(0).getNumericCellValue();
  23. user.setId(id);
  24. }
  25.  
  26. String name = row.getCell(1).getStringCellValue();
  27. user.setName(name);
  28.  
  29. String sex = row.getCell(2).getStringCellValue();
  30. user.setSex(sex);
  31.  
  32. try {
  33. String age = row.getCell(3).getStringCellValue();
  34. user.setAge(Integer.parseInt(age));
  35. } catch (IllegalStateException e) {
  36. int age=(int)row.getCell(3).getNumericCellValue();
  37. user.setAge(age);
  38. }
  39. //想数据库中添加新对象
  40. addUser(user);//方法
  41. }
  42.  
  43. }
  44.  
  45. inputStream.close();
  46. }

  

  

SSM excel文件的导入导出的更多相关文章

  1. NPOI对excel文件的导入导出

    现理解:将一个Excel文件(工作簿-IWorkBook)看做是一个你要操作的对象,每个工作簿包含多个工作表(ISheet)对象,每个工作表中又包含多个行对象(IRow),每行又包含多个单元格(ICe ...

  2. java项目中Excel文件的导入导出

    package poi.excel; import java.io.IOException; import java.io.InputStream; import java.io.OutputStre ...

  3. EasyExcel完成excel文件的导入导出

    简介 常见的Excel分析框架有Apache poi 和EasyExcel, poi在另一篇已经介绍过了,详情可以看[https://www.cnblogs.com/jasmine-e/p/16064 ...

  4. 使用PHPExcel实现Excel文件的导入和导出(模板导出)

    在之前有写过一篇文章讲述了使用PHP快速生成excel表格文件并下载,这种方式生成Excel文件,生成速度很快,但是有缺点是:1.单纯的生成Excel文件,生成的文件没有样式,单元格属性(填充色,宽度 ...

  5. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  6. SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)      select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) ...

  7. java实现文件批量导入导出实例(兼容xls,xlsx)

    1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...

  8. SQL SERVER 和ACCESS、EXCEL的数据导入导出

    SQL SERVER 与ACCESS.EXCEL之间的数据转换SQL SERVER 和ACCESS的数据导入导出[日期:2007-05-06]     来源:Linux公社  作者:Linux 熟 悉 ...

  9. 使用phpExcel实现Excel数据的导入导出(完全步骤)

    使用phpExcel实现Excel数据的导入导出(完全步骤)   很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人 ...

随机推荐

  1. Java内存模型探秘

    1.Java内存模型概述 Java内存模型是一种抽象概念,不是真实存在的.主要定义了程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存取出变量这样的底层细节.注意:这里的变量仅包括实例字段 ...

  2. Antd Select组件结合使用出现must set key for <rc-animate> children问题

    一.以下情况可能导致错误发生 出现这个问题的首要条件是因为Select的mode 设置成multiple or tags 1. Select的defaultValue使用了空字符串 例如: const ...

  3. Vim里常见的几个不可见字符

    Vim里常见的几个不可见字符:^@ = 0x00 Null值^I = 0x09 水平制表^J = 0x0A 换行^M = 0x0D 回车

  4. java中捕获Oracle异常

    try{ } catch (Exception e){ String msg=.getMessage(): int index= msg. toUpperCase(). indexOf("O ...

  5. 算法笔记--manacher算法

    参考:https://www.cnblogs.com/grandyang/p/4475985.html#undefined 模板: ; int p[N]; string manacher(string ...

  6. 一张图了解Spring Cloud微服务架构

    Spring Cloud作为当下主流的微服务框架,可以让我们更简单快捷地实现微服务架构.Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟.经得起实际考验的服务框架组合起来 ...

  7. NetSec2019 20165327 Exp6 信息搜集与漏洞扫描

    NetSec2019 20165327 Exp6 信息搜集与漏洞扫描 一.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 二.实践内容 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 ...

  8. RobotFramework自动化测试框架-Selenium Web自动化(-)-Open Browser和Close Browser

    Selenium出来已经有很多年了,从最初的Selenium1到后来的Selenium2,也变得越来越成熟,而且也已经被很多公司广泛使用.Selenium发展的过程中,分了很多模块,这里我们主要介绍W ...

  9. android -------- RecyclerView的可(多个Item水平,垂直)滚动列表的实现

    RecyclerView的可滚动的列表实现,视图相邻的视图在屏幕上部分或完全可见(水平3个item,第一个和第三个显示一部分,第二个完全显示) 效果如图: 基于RecyclerView完成的(自定义控 ...

  10. 使用 Laragon 在 Windows 中快速搭建 Laravel 本地开发环境 (转)

    laravel学院 简介 对于那些使用 Windows 操作系统的同学来说,Homestead 和 LaraDock 虽说支持 Windows 系统,但是对初学者来说,安装配置起来还是有一定复杂度的, ...