easyexcel的简单使用(execl模板导出)

模板支持功能点

  1. 支持列表
  2. 支持自定义头名称
  3. 支持自定义fileName
  4. 支持汇总

模板示例

操作

pom引入

java 复制代码
  <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>${easyexcel.version}</version>
        </dependency>

版本

java 复制代码
  <easyexcel.version>3.3.4</easyexcel.version>

这里尽量使用新版本,用老版本的话可能会有问题。

简单封装easyexcel方法

java 复制代码
public class EasyExportUtil {




    /**
     * 指定流输出
     * @param fileName
     * @param response
     * @param sheetName
     * @param templateFileName
     * @param list
     * @param <T>
     */
    public static <T>  void exportWithTemplate(String fileName,HttpServletResponse response, String sheetName, String templateFileName, List<T> list) {
        try {
            response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(templateFileName).registerWriteHandler(new CustomTemplateSheetStrategy(0,sheetName)).build()) {
            WriteSheet writeSheet = EasyExcel.writerSheet().build();

            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            excelWriter.fill(list, fillConfig, writeSheet);
            Map<String, Object> map = new HashMap<>();
            map.put("date", "2019年10月9日13:28:28");
            map.put("total", 1000);
            excelWriter.fill(map, writeSheet);

        } catch (IOException e) {
            e.printStackTrace();
        }


    }





}

自定义拦截器

java 复制代码
public class CustomTemplateSheetStrategy implements SheetWriteHandler {
    private Integer sheetNo;
    private String sheetName;
    public CustomTemplateSheetStrategy(String sheetName) {
        this.sheetName = sheetName;
    }
    public CustomTemplateSheetStrategy(Integer sheetNo, String sheetName) {
        this.sheetNo = sheetNo;
        this.sheetName = sheetName;
    }
    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    }
    /**
     * 功能:动态修改模板中sheet的名称
     * sheet创建完成后调用
     * @param writeWorkbookHolder
     * @param writeSheetHolder
     */
    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        if (sheetName == null) {
            return;
        }
        if (sheetNo == null) {
            sheetNo = 0;
        }
        writeWorkbookHolder.getCachedWorkbook().setSheetName(sheetNo, sheetName);
    }

}

date和total 我这里就写死了,大家根据自己的情况进行更改。

接口示例

java 复制代码
    @GetMapping("/export")
    public void exportDeviceList(HttpServletResponse response) {

        List<ExcelData3> list = new ArrayList<>();
        for (int i = 0; i <= 10; i++) {
            ExcelData3 excelData3 = new ExcelData3();
            excelData3.setA("testA");
            excelData3.setB("testB");
            excelData3.setC("testC");
            excelData3.setD("testD");
            excelData3.setE("testE");
            excelData3.setF("testF");
            excelData3.setG("testG");
            excelData3.setH("testH");
            excelData3.setI("testI");
            list.add(excelData3);
        }
        EasyExportUtil.exportWithTemplate(System.currentTimeMillis() + ".xlsx", response, "我是一个sheetName", CommonUtlis.resolvePath("test.xlsx"), list);
    }

调用

导出示例

参考

easyexcel示例填充

相关推荐
前端 贾公子2 小时前
第09章:上下文与记忆 (2)
java·服务器·前端
2601_962203513 小时前
Java进阶07集合(续)
java·开发语言
郑州光合科技余经理3 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
专注仿真3 小时前
Spring AI 实现智能对话系统项目指南
数据结构·spring·机器学习
roman_日积跬步-终至千里3 小时前
【数据治理(6)】DataOps 不是调度工具,而是让数据产品长期可信的运行机制
java·服务器·网络
落魄大学生之流水线上谋生计3 小时前
LangGraph 基本用法指南
java·windows·python·langchain
2601_962128414 小时前
SpringBoot篇(缓存层)
java·spring boot·缓存
Dovis(誓平步青云)4 小时前
折叠屏悬停看视频,上半屏和下半屏应该各做什么
android·java·服务器·开发语言·安全·音视频
2501_937860944 小时前
Java多线程初阶(下)—— synchronized、volatile、wait/notify与经典并发工具
java·开发语言·jvm
牛油果子哥q4 小时前
C++内存池与对象池精讲:内存碎片、自定义分配器、对象池实现、STL allocator原理、工程落地与性能对比
java·开发语言·c++