SpringBoot使用esayExcel根据模板导出excel

1、依赖

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

2、模板

3、实体类

package com.skybird.iot.addons.productionManagement.qualityTesting.backend.jdo;

import com.alibaba.excel.annotation.ExcelProperty;

public class qualityTestingExcelDao {

  @ExcelProperty("序号")
  private String index;

  @ExcelProperty("质检类别")
  private String workingProcedure;

  @ExcelProperty("检查部位")
  private String inspectionPart;

  @ExcelProperty("检查内容")
  private String inspectionContent;

  @ExcelProperty("检查方法")
  private String inspectionMethod;

  @ExcelProperty("检查结果")
  private String inspectionResult;

  @ExcelProperty("备注")
  private String notes;

  public String getIndex() {
    return index;
  }

  public void setIndex(String index) {
    this.index = index;
  }

  public String getWorkingProcedure() {
    return workingProcedure;
  }

  public void setWorkingProcedure(String workingProcedure) {
    this.workingProcedure = workingProcedure;
  }

  public String getInspectionPart() {
    return inspectionPart;
  }

  public void setInspectionPart(String inspectionPart) {
    this.inspectionPart = inspectionPart;
  }

  public String getInspectionContent() {
    return inspectionContent;
  }

  public void setInspectionContent(String inspectionContent) {
    this.inspectionContent = inspectionContent;
  }

  public String getInspectionMethod() {
    return inspectionMethod;
  }

  public void setInspectionMethod(String inspectionMethod) {
    this.inspectionMethod = inspectionMethod;
  }

  public String getInspectionResult() {
    return inspectionResult;
  }

  public void setInspectionResult(String inspectionResult) {
    this.inspectionResult = inspectionResult;
  }

  public String getNotes() {
    return notes;
  }

  public void setNotes(String notes) {
    this.notes = notes;
  }

  @Override
  public String toString() {
    return "qualityTestingExcelDao{"
        + "index='"
        + index
        + '\''
        + ", workingProcedure='"
        + workingProcedure
        + '\''
        + ", inspectionPart='"
        + inspectionPart
        + '\''
        + ", inspectionContent='"
        + inspectionContent
        + '\''
        + ", inspectionMethod='"
        + inspectionMethod
        + '\''
        + ", inspectionResult='"
        + inspectionResult
        + '\''
        + ", notes='"
        + notes
        + '\''
        + '}';
  }
}

4、接口

private static List<qualityTestingExcelDao> getList(Document dto) {
    List<Document> list = DocuLib.getList(dto, "qualityInspectionList");
    List<qualityTestingExcelDao> excelList = new ArrayList<>();
    // 用于记录当前质检序号
    int index = 0;
    // 用于记录当前质检类别
    String inspectionPart = "";
    for (int i = 0; i < list.size(); i++) {
      Document item = list.get(i);
      String workingProcedure = DocuLib.getStr(item, "workingProcedure");
      List<Document> detectionList = DocuLib.getList(item, "detectionList");
      if (ObjectUtils.isNotEmpty(detectionList)) {
        for (Document row : detectionList) {
          qualityTestingExcelDao dao = new qualityTestingExcelDao();
          String inspectionPartDb = DocuLib.getStr(row, "project");
          if (!inspectionPart.equals(inspectionPartDb)) {
            inspectionPart = inspectionPartDb;
            index++;
          }
          dao.setIndex(String.valueOf(index));
          dao.setWorkingProcedure(workingProcedure);
          dao.setInspectionPart(inspectionPartDb);
          dao.setInspectionContent(DocuLib.getStr(row, "content"));
          dao.setInspectionMethod(DocuLib.getStr(row, "inspectionMethods.name"));
          dao.setInspectionResult(DocuLib.getStr(row, "result.name"));
          dao.setNotes(DocuLib.getStr(row, "illustrate"));
          excelList.add(dao);
        }
      } else {
        qualityTestingExcelDao dao = new qualityTestingExcelDao();
        dao.setIndex(String.valueOf(index));
        dao.setWorkingProcedure(workingProcedure);
        excelList.add(dao);
      }
    }
    return excelList;
  }

  /**
   * 根据模板下载
   *
   * @param response
   * @throws IOException
   */
  @GetMapping("/excel")
  public void excel(HttpServletResponse response, @RequestParam("id") String id)
      throws IOException {
    try {
      Document dto = DBUtils.find(qualityTesting.collectionName, new Document("id", id));
      List<qualityTestingExcelDao> excelList = getList(dto);

      InputStream templateStream =
          qualityTestingWeb.class.getResourceAsStream("/templates/qualityTesting.xlsx");
      if (templateStream == null) {
        throw new FileNotFoundException("未找到模板文件");
      }
      // 生成目标文件
      ExcelWriter excelWriter =
          EasyExcel.write(response.getOutputStream()).withTemplate(templateStream).build();
      WriteSheet writeSheet = EasyExcel.writerSheet().build();
      // 每次都会重新生成新的一行,而不是使用下面的空行
      FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
      // 替换第一种占位符
      Map<String, Object> map = new HashMap<>();
      map.put("name", DocuLib.getStr(dto, "productName"));
      map.put("userName", DocuLib.getStr(dto, "completeBy.name"));
      map.put("time", DocuLib.getStr(dto, "completeDate"));
      excelWriter.fill(map, writeSheet);
      // 第二种占位符替换,这里定义了 hisData
      excelWriter.fill(new FillWrapper("dto", excelList), fillConfig, writeSheet);
      excelWriter.finish();
      // 设置响应头
      response.setContentType("application/vnd.ms-excel"); // 设置文本内省
      response.setCharacterEncoding("utf-8"); // 设置字符编码
      response.setHeader("Content-disposition", "attachment;fileName=name.xlsx");
      // 关闭模板流
      templateStream.close();
    } catch (FileNotFoundException e) {
      // 处理文件未找到异常
      response.setStatus(HttpServletResponse.SC_NOT_FOUND);
      // 返回适当的错误消息
      response.getWriter().write("未找到模板文件");
    } catch (Exception e) {
      // 处理其他异常
      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
      // 返回适当的错误消息
      response.getWriter().write("内部服务器错误");
    }
  }

5、效果

### 回答1: EasyExcel是一款Java开发的Excel操作工具,可以方便地进行Excel文件的读写操作。使用EasyExcel导出模板Excel非常简单,只需要定义好模板文件的格式和数据,然后调用EasyExcel的API即可实现导出。同时,EasyExcel还支持多线程导出和大数据量导出,可以满足各种复杂的导出需求。 ### 回答2: EasyExcel是一种基于Java语言的Excel操作模板引擎,它能够方便快捷地导出Excel文件。 EasyExcel还支持导出大数据量的Excel文件,同时支持多种文件格式导出。下面简单介绍一下使用EasyExcel进行导出模板Excel的步骤。 第一步:添加EasyExcel依赖 需要在项目中添加EasyExcel的依赖,可以通过Maven仓库或者手动将jar包添加到项目中。 第二步:定义Excel的标题与对应字段 在定义Excel的标题和对应字段时,需要使用注解的方式进行标注。例如,可以使用@ExcelProperty(value = "姓名", index = 0)定义Excel的第一列的标题为“姓名”,对应Java实体类的属性字段为index=0的字段值。 第三步:创建ExcelWriter实例对象并进行Excel初始设置 创建ExcelWriter实例对象并用setXXX方法进行Excel的初始设置。设置包括:Excel文件名、表格名称、表格头显示等等。 第四步:写入Excel数据 调用ExcelWriter的write方法,将数据写入Excel文件中。如果需要将文件写入磁盘,则在write方法后还需要调用finish方法进行文件的保存。 第五步:关闭ExcelWriter 在所有数据写入Excel文件后,需要调用ExcelWriter的close方法进行资源关闭。 以上就是使用EasyExcel导出模板Excel的基本步骤。需要注意的是,EasyExcel操作Excel的性能优异,因此在导出大数据量的Excel文件时,推荐使用EasyExcel进行操作。 ### 回答3: EasyExcel是一款Java对象化操作Excel的工具,其提供了丰富的API接口,使得我们可以通过代码直接生成Excel并指定相应的内容。同时,EasyExcel也提供了导出Excel模板的功能,可以使得程序员在开发时更加快速便捷地生成模板。下面我们来简单介绍一下如何使用EasyExcel导出Excel模板。 1. 首先,我们需要引入EasyExcel的依赖包和所需要的其他依赖包,这里我们以Maven项目为例,在pom.xml中添加如下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.7</version> </dependency> ``` 2. 接下来,我们可以创建一个模型类,用来描述Excel中的数据结构,比如: ```java @Data public class User { @ExcelProperty(value = "用户ID", index = 0) private Long id; @ExcelProperty(value = "用户名", index = 1) private String name; } ``` 在上述代码中,我们使用@Data注解表示这是一个Java Bean模型类,并使用@ExcelProperty注解给每一个属性指定相应的Excel标题和列索引。 3. 接下来,我们可以使用EasyExcel提供的工具类,如下所示: ```java public class UserExcelUtil { public static void downloadTemplate(HttpServletResponse response) throws Exception { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("用户信息模板", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), User.class).build(); WriteSheet writeSheet = EasyExcel.writerSheet("用户信息").build(); excelWriter.write(new ArrayList<>(), writeSheet); excelWriter.finish(); response.getOutputStream().flush(); } } ``` 在上述代码中,我们首先设定了响应头,指明了要下载的Excel文件名及其后缀名。然后,我们使用EasyExcel提供的ExcelWriter类来创建Excel文件。同时,我们还指定了Excel文件中的sheet名称和模型类对象。其中,第一个参数是输出流对象,表示将Excel文件输出到响应中;第二个参数是模型类对象,表示这个Excel文件中存放的数据对象的类型。最后,我们写入一个空list,生成一个空模板。 4. 以上步骤完成以后,我们可以通过spring或servlet等框架将这个下载模板Excel的方法暴露出去,供前端调用。 总体来说,使用EasyExcel导出模板Excel非常简单,只需要几行代码就可以快速实现。相比其他Java操作Excel的工具,EasyExcel对于大数据量的Excel文件有很好的处理能力,同时支持多线程处理,性能优异。所以,如果你在Java项目中需要操作Excel文件,不妨试试EasyExcel吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值