美文网首页
easyexcel 数据导出(一)

easyexcel 数据导出(一)

作者: 无我_无他_有你 | 来源:发表于2021-04-15 16:17 被阅读0次

前言 该方式适用于前端页面点击导出然后将数据导出成excel文件的场景
依据导出数据实体类来自动导出我们想要的字段数据

1.导入依赖

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>easyexcel</artifactId>
   <version>2.2.6</version>
</dependency>

2.导入数据实体类上贴上注解@ExcelIgnore,如果某个字段不用导出,贴上注解@ExcelIgnore,如下

@ExcelIgnore(value = "id")
private Long id;
@ExcelProperty(value = "name")
private String name;

3.工具方法

/**
   * 方法描述: 浏览器点击导出后导出文件
   *
   * @param response 响应
   * @param list  导出数据集合
   * @param fileName 文件名 不含后缀
   * @param clazz 导出数据的数据类型
   * @return void
   * @author wqf
   * @date 2021/4/15 16:05
   */
  public static void exportExcel(HttpServletResponse response, List<?> list,
                                             String fileName, Class<?> clazz) throws IOException {

      if (CollectionUtils.isEmpty(list)) {
          throw new RuntimeException();
      }
      if (StringUtils.isEmpty(fileName)) {
          fileName = new Date().toString();
      }
      String sheetName = fileName;
      // 使用swagger 会有问题,请直接用浏览器或者用postman
      try {
          response.setContentType("application/vnd.ms-excel");
          response.setCharacterEncoding("utf-8");
          //防止中文乱码
          fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
          response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
          // 这里需要设置不关闭流
          EasyExcel.write(response.getOutputStream(), clazz).autoCloseStream(Boolean.FALSE).sheet(sheetName)
                  .doWrite(list);
      } catch (Exception e) {
          log.warn("文件下载失败!");
      }
  }

相关文章

网友评论

      本文标题:easyexcel 数据导出(一)

      本文链接:https://www.haomeiwen.com/subject/ohadlltx.html