SpringBoot处理Exce表格Demo

简介: SpringBoot处理Exce表格Demo

项目构建


项目下载


pom.xml


<!-- EXCEL下载 poi -->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.17</version>
    </dependency>
    <!-- Excel读取 /poi-ooxml -->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.17</version>
    </dependency>
    <!-- commons-io -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>


Excel下载(导出数据)


注意事项:复制全即可


前端


<a href="downExcel">下载链接</a>


后端代码


@RequestMapping("/downExcel")
  public String downExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String path = ResourceUtils.getURL("classpath:").getPath();
    System.out.println(path);
    // 创建HSSFWorkbook对象(excel的文档对象)
    HSSFWorkbook wb = new HSSFWorkbook();
    // 建立新的sheet对象(excel的表单)
    HSSFSheet sheet = wb.createSheet("成绩表");
    // 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
    HSSFRow row1 = sheet.createRow(0);
    // 创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
    HSSFCell cell = row1.createCell(0);
    // 设置单元格内容
    cell.setCellValue("学员考试成绩一览表");
    // 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));
    // 在sheet里创建第二行
    HSSFRow row2 = sheet.createRow(1);
    // 创建单元格并设置单元格内容
    row2.createCell(0).setCellValue("姓名");
    row2.createCell(1).setCellValue("班级");
    row2.createCell(2).setCellValue("笔试成绩");
    row2.createCell(3).setCellValue("机试成绩");
    // 在sheet里创建第三行
    HSSFRow row3 = sheet.createRow(2);
    row3.createCell(0).setCellValue("李明");
    row3.createCell(1).setCellValue("As178");
    row3.createCell(2).setCellValue(87);
    row3.createCell(3).setCellValue(78);
    // .....省略部分代码
    // 输出Excel文件
    OutputStream output = response.getOutputStream();
    response.reset();
    response.setHeader("Content-disposition", "attachment; filename=details.xls");
    response.setContentType("application/msexcel");
    wb.write(output);
    output.close();
    return null;
  }


Excel上传(导入数据)


注意事项:


     代码:controller层里应该放service层,可以把excel的逻辑代码根据实际情况处理一下,本文没有处理


     前端:post请求


                enctype属性必须写,否则出现出现空指针异常


                 name="file"   必须和controller里面的方法的参数命名一致


    后端: 方法参数必须和前端的 文件域里的name属性一致,


前端


<form action="upExcel" method="post"  enctype="multipart/form-data">
Excel上传:<input  type="file"  name="file"/><input type="submit" value="submit">
</form>


后端


@RequestMapping("/upExcel")
  @ResponseBody
  public String upExcel(MultipartFile file) throws Exception {
    if (file == null || file.isEmpty()) {
      return "文件不能为空";
    }
    // 获取Excel的输出流
    InputStream inputStream = file.getInputStream();
    // 获取文件名称
    String fileName = file.getOriginalFilename();
    // init工作簿
    Workbook workbook = null;
    // 获取文件后缀
    String fileType = fileName.substring(fileName.lastIndexOf("."));
    // 根据不同后缀init不同的类,是xls还是xlsx
    if (".xls".equals(fileType)) {
      workbook = new HSSFWorkbook(inputStream);
    } else if (".xlsx".equals(fileType)) {
      workbook = new XSSFWorkbook(inputStream);
    } else {
      workbook = null;
      return "请上传正确的表格文件";
    }
    // 如果上传为费excel文件,返回
    if (null == workbook) {
      return "请上传文件";
    }
    // init
    Sheet sheet = null;
    Row row = null;
    Cell cell = null;
    // 定义读取的容器
    List list = new ArrayList<>();
    for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
      sheet = workbook.getSheetAt(i);
      if (sheet == null) {
        continue;
      }
      for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
        row = sheet.getRow(j);
        if (row == null || row.getFirstCellNum() == j) {
          continue;
        }
        List<Object> li = new ArrayList<>();
        for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
          cell = row.getCell(y);
          li.add(cell);
        }
        list.add(li);
      }
    }
    // 关闭流
    workbook.close();
    inputStream.close();
    for (int i = 0; i < list.size(); i++) {
      List<Object> lo = (List<Object>) list.get(i);
      // TODO 随意发挥
      System.out.println(lo);
    }
    return "上传成功";
  }
目录
相关文章
|
8月前
|
Java
Springboot 导出word,动态填充表格数据
Springboot 导出word,动态填充表格数据
|
8月前
|
Java 数据库
SpringBoot定时将数据库表生成Excel表格
SpringBoot定时将数据库表生成Excel表格
112 0
|
Java 关系型数据库 MySQL
Springboot 导入导出Excel ,一对多关系,复合表格、合并单元格数据
Springboot 导入导出Excel ,一对多关系,复合表格、合并单元格数据
1592 0
Springboot 导入导出Excel ,一对多关系,复合表格、合并单元格数据
|
7月前
|
存储 Java Maven
Spring Boot WebFlux 增删改查完整实战 demo
Spring Boot WebFlux 增删改查完整实战 demo
|
8月前
|
JavaScript 关系型数据库 MySQL
springboot+vue实现增删改查小demo
springboot+vue实现增删改查小demo
98 0
|
8月前
|
前端开发 Java Maven
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
1212 0
|
8月前
|
前端开发 JavaScript Java
springboot+mybatis plus+vue+elementui+axios 表格分页查询demo
springboot+mybatis plus+vue+elementui+axios 表格分页查询demo
98 0
|
JavaScript Java
实现Excel导出SpringBoot项目中表格数据
最近写业务代码,涉及到这个,前阵子写了篇博客介绍了用JS以Excel形式导出后台返回给前台的数据,这种方法只能是导出一个页面的数据,并不能按分页的形式导出,所以今天就改写一下,实现将接口返回的所有数据进行全部导出。
103 0
|
前端开发 Java
Springboot之Excel表格导出
Springboot之Excel表格导出
Springboot之Excel表格导出
|
SQL 前端开发 JavaScript
SpringBoot+VUE实现数据表格
SpringBoot+VUE实现数据表格
SpringBoot+VUE实现数据表格