当前位置: 首页 > news >正文

Springboot 指定自定义模板导出Excel文件

前言

之前写过一篇极其简单的excel导入导出,是单个文件的:
Springboot 最简单的结合MYSQL数据实现EXCEL表格导出及数据导入_小目标青年的博客-CSDN博客 

还写过一篇单个,多个 excel文件导出,转成ZIP包的:
Springboot 导出Excel文件,多个需要压缩成 zip 包_小目标青年的博客-CSDN博客 

 

然后:

 

 于是该篇就来了, 指定模板(自定义)导出数据,就像:

 

正文

开始实战:
 

pom.xml依赖:
 


        <!-- 导入和导出-->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>3.0.3</version>
        </dependency>

我们导出数据的实体类  UserExcelDTO.java

import cn.afterturn.easypoi.excel.annotation.Excel;

/**
 * @Author: JCccc
 * @Date: 2022-7-14 10:58
 * @Description:
 */
public class UserExcelDTO {
    @Excel(name = "学号", height = 8, width = 13, isImportField = "true")
    private Integer id;
    @Excel(name = "姓名", height = 8, width = 13, isImportField = "true")
    private String  userName;
    @Excel(name = "年龄", height = 8, width = 13, isImportField = "true")
    private String  userAge;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", userAge='" + userAge + '\'' +
                '}';
    }

    public UserExcelDTO() {
    }

    public UserExcelDTO(Integer id, String userName, String userAge) {
        this.id = id;
        this.userName = userName;
        this.userAge = userAge;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserAge() {
        return userAge;
    }

    public void setUserAge(String userAge) {
        this.userAge = userAge;
    }
}

里面使用了 @Excel注解标记一下相关字段

然后自定义模板, 注意里面细节:

 

每一行数据都是一个对象,都在list 里面,

所以看到 首个字段 和 末尾最后的字段 是有 括号的   {}:

 

示例格式:
 

{{$fe: list t.id

t.userName

t.userAge}}

然后把自定义模板文件丢到 静态资源路径下:
 

 

 

然后是实现使用自定义模板,填充list数据导出excel文件:

 


    /**
     * excel导出 列表 指定模板
     *
     * @return
     */
    @GetMapping(value = "/exportAssignTemplateExcel")
    public void opportunityExport(HttpServletResponse response) {
        List<UserExcelDTO> exportList = new ArrayList<>();

        UserExcelDTO userExcel1=new UserExcelDTO(1001,"JCccc","18");
        UserExcelDTO userExcel2=new UserExcelDTO(1002,"ACccc","29");
        UserExcelDTO userExcel3=new UserExcelDTO(1003,"GCccc","50");

        exportList.add(userExcel1);
        exportList.add(userExcel2);
        exportList.add(userExcel3);

        Map map = Maps.newHashMap();
        map.put("list", exportList);
        //获取导出模板地址
        ClassPathResource classPathResource = new ClassPathResource("static/export/template/MyUserTemplate.xlsx");
        String path = classPathResource.getPath();
        TemplateExportParams templateExportParams1 = new TemplateExportParams(path);
        Workbook wb = ExcelExportUtil.exportExcel(templateExportParams1, map);
        String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy_MM_dd_HH_mm_ss"));
        String fileName = "用户数据"+time+".xlsx";
        try {
            response.setContentType("application/octet-stream;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
            response.flushBuffer();
            wb.write(response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

代码简析:

 

调用一下接口,看看效果:
 

 

excel文件内容:

 

好了,该篇就到这。

相关文章:

  • Mysql 我随手造200W条数据,给你们讲讲分页优化。
  • 【云原生】风云暗涌的时代,DBA们的利刃出鞘了
  • 以后面试官问你 为啥不建议使用Select *,请你大声回答他!
  • Springboot 导入导出Excel ,一对多关系,复合表格、合并单元格数据
  • 怎么清晰地理解、表达 IaaS 、 PaaS 、 SaaS ?
  • UML类图的六大关系,最佳学习理解方式
  • Springboot 整合 Socket 实战案例 ,实现 单点发送、广播群发,1对1,1对多
  • Springboot Mybatis 、JPA 调用存储过程,实战教程
  • 写代码的七八九十宗罪,多图、胆小慎入!
  • Springboot byte[] 转 MultipartFile ,InputStream 转 MultipartFile
  • Springboot 最细节全面的接口传参接参介绍,总有你喜欢的一种方式
  • Springboot 整合RabbitMq ,用心看完这一篇就够了
  • 用过Apifox这个API接口工具后,确实感觉postman有点鸡肋......
  • ClickHouse 挺快,esProc SPL 更快
  • 苹果6sp内存可以扩展吗_饮用苹果醋可以减肥吗?
  • 时间复杂度分析经典问题——最大子序列和
  • [case10]使用RSQL实现端到端的动态查询
  • 2017 年终总结 —— 在路上
  • crontab执行失败的多种原因
  • eclipse的离线汉化
  • Javascripit类型转换比较那点事儿,双等号(==)
  • PAT A1120
  • Spark RDD学习: aggregate函数
  • SpriteKit 技巧之添加背景图片
  • SQL 难点解决:记录的引用
  • ViewService——一种保证客户端与服务端同步的方法
  • 从PHP迁移至Golang - 基础篇
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 主流的CSS水平和垂直居中技术大全
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 交换综合实验一
  • ​【已解决】npm install​卡主不动的情况
  • #{} 和 ${}区别
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (12)目标检测_SSD基于pytorch搭建代码
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C++)八皇后问题
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (七)Java对象在Hibernate持久化层的状态
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net mvc 获取url中controller和action
  • .net wcf memory gates checking failed
  • .net(C#)中String.Format如何使用