SpringBoot 整合eazyPoi 4.3.0 Excel数据导入导出(持续更新功能)

依赖

文档

<!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-spring-boot-starter -->
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.3.0</version>
</dependency>

注解用法说明

在这里插入图片描述

  • @Excel 用在字段上面
  • @ExcelCollection 表示根对象中的list
  • @ExcelEntity 表示根对象中的实体
  • @ExcelIgnore 忽略导出
  • @ExcelTarget 绑定Id

@ExcelTarget 绑定Id

解决了相同的实体去映射Excel 但是表头名字不太相同 实现根据班级不同映射不同名字
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里的@ExcelTarget 表示使用X这个对象是可以针对不同字段做不同处理
同样的ExcelEntity 和ExcelCollection 都支持这种方式

@Excel 用在字段上面

属性 类型 默认值 功能
name String null 列名,支持ExcelTarget
needMerge boolean fasle 纵向合并单元格(用于含有list中,单个的单元格,合并list创建的多个row)
orderNum String “0” 列的排序,支持ExcelTarget
replace String[] {} 字符替换 导出是{“替换值_源”,“替换值_源”}
savePath String “upload” 导入文件保存路径,如果是图片可以填写,默认是upload/className/ IconEntity这个类对应的就是upload/Icon/
type int 1 导出类型 1 是文本 2 是图片,3 是函数,10 是数字 默认是文本
width double 10 列宽
height double 10 列高,后期打算统一使用@ExcelTarget的height,这个会被废弃,注意
isStatistics boolean fasle 自动统计数据,在追加一行统计,把所有数据都和输出[这个处理会吞没异常,请注意这一点]
isHyperlink boolean FALSE 超链接,如果是需要实现接口返回对象
isImportField boolean TRUE 校验字段,看看这个字段是不是导入的Excel中有,如果没有说明是错误的Excel,读取失败,支持ExcelTarget
exportFormat String “” 导出的时间格式,以这个是否为空来判断是否需要格式化日期
importFormat String “” 导入的时间格式,以这个是否为空来判断是否需要格式化日期
format String “” 时间格式,相当于同时设置了exportFormat 和 importFormat
databaseFormat String “yyyyMMddHHmmss” 导出时间设置,如果字段是Date类型则不需要设置 数据库如果是string 类型,这个需要设置这个数据库格式,用以转换时间格式输出
numFormat String “” 数字格式化,参数是Pattern,使用的对象是DecimalFormat
imageType int 1 导出类型 1 从file读取 2 是从数据库中读取 默认是文件 同样导入也是一样的
suffix String “” 文字后缀,如值实90 suffix="%" 变成90%
isWrap boolean TRUE 是否换行 即支持\n
mergeRely int[] {} 合并单元格依赖关系,比如第二列合并是基于第一列 则{0}就可以了
mergeVertical boolean fasle 纵向合并内容相同的单元格
fixedIndex int -1 对应excel的列,忽略名字
isColumnHidden boolean FALSE 导出隐藏列

看下如何使用 在下面有完全代码可以copy

@Data
@ExcelTarget("user1")
@Accessors(fluent = true)
public class TestBean implements Serializable {
   
   
    @Excel(name = "A班级编号_user1,B班级编号_user2" ,//表头名称
            width = 15.0, //宽度
            orderNum = "0", //排序 这个排序在@ExcelEntity中也可以连贯使用  ExcelCollection内的Excel不可以连贯使用
            needMerge = true)
    private Integer id;
    @Excel(name = "姓名",width = 15.0,orderNum = "1",needMerge = true)
    private String name;
    @Excel(name = "性別",
            replace = {
   
   "男_1","女_2"}, //字符替换  源实1代表男  2代表女
            suffix = "生",//添加后缀
            orderNum = "2",needMerge = true)
    private int sex;
    @Excel(name = "生日", databaseFormat = "yyyyMMddHHmmss",//如果是字符串的话>>同步数据库格式
            format = "yyyy-MM-dd HH:mm:ss",//设置导入导出格式
            orderNum = "3",
            needMerge = true)
    private Date bir;
    @ExcelIgnore //不生成数据
    @Excel(name = "生日2", databaseFormat = "yyyy-MM-dd HH:mm:ss",format = "yyyy-MM-dd HH:mm:ss",orderNum = "4")
    private Date bir2;
    @Excel(name = "照片",type = 2,//设置数据类型 2是图片
            imageType = 1,//图片使用方式
            orderNum = "8",width = 30,height = 30)
    private String img;
    @Excel(name = "照片2",type = 2,imageType = 2,orderNum = "8",width = 30,height = 30)
    private byte[] img1;

    @ExcelEntity  //表示这是一个实体  其实相当于在根实体中添加其他字段的感觉
    private Card card;

    @ExcelCollection(name = "物品",orderNum = "7")//这个集合会在这个对象内循环遍历..之前的字段数据只在第一行显示
    private List<Order> orders;

@ExcelCollection

属性 类型 默认值 功能
id String null 定义ID
name String null 定义集合列名,支持ExcelTarget
orderNum int 0 排序,支持ExcelTarget
type Class<?> ArrayList.class 导入时创建对象使用

实体代码

3个实体


@Data
@ExcelTarget("user1")
@Accessors(fluent = true)
public class TestBean implements Serializable {
   
   
    public static String imgPath="imgs/company/baidu.png";
    @Excel(name = "A班级编号_user1,B班级编号_user2" ,//表头名称
            width = 15.0, //宽度
            orderNum = "0", //排序 这个排序在@ExcelEntity中也可以连贯使用  ExcelCollection内的Excel不可以连贯使用
            needMerge = true)
    private Integer id;
    @Excel(name = "姓名",width = 15.0,orderNum = "1",needMerge = true)
    private String name;
    @Excel(name = "性別",
            replace = {
   
   "男_1","女_2"}, //字符替换  源实1代表男  2代表女
            suffix = "生",//添加后缀
            orderNum = "2",needMerge = true)
    private int sex;
    @Excel(name = "生日", databaseFormat = "yyyyMMddHHmmss",//如果是字符串的话>>同步数据库格式
            format = "yyyy-MM-dd HH:mm:ss",//设置导入导出格式
            orderNum = "3",
            needMerge = true)
    private Date bir;
    @ExcelIgnore //不生成数据
    @Excel(name = "生日2", databaseFormat = "yyyy-MM-dd HH:mm:ss",format = "yyyy-MM-dd HH:mm:ss",orderNum = "4")
    private Date bir2;
    @Excel(name = "照片",type = 2,//设置数据类型 2是图片
            imageType = 1,//图片使用方式
            orderNum = "8",width = 30,height = 30)
    private String img;
    @Excel(name = "照片2",type = 2,imageType = 2,orderNum = "8",width = 30,height = 30)
    private byte[] img1;

    @ExcelEntity  //表示这是一个实体  其实相当于在根实体中添加其他字段的感觉
    private Card card;

    @ExcelCollection(name = "物品",orderNum = "7")//这个集合会在这个对象内循环遍历..之前的字段数据只在第一行显示
    private List<Order> orders;

    //获取10条 完整数据
    public static List<TestBean> getListUser(){
   
   
        List<TestBean> list=new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
   
   
            list.add(new TestBean().id(i).name("姓名"+i).bir(new Date()).sex(i%2==0?1:2).card(new Card())
            .orders(getOrder())
                    .img(imgPath));
        }
        return list;
    }
    //只获取根对象数据  没有图片,list,实体
    public static List<TestBean> getBigListFor10000(int page){
   
   
        List<TestBean> list=new ArrayList<>();
        for (int i = page; i <= page*10000; i++) {
   
   
            list.add(new TestBean().id(i).name("姓名"+i).bir(new Date()).sex(i%2==0?1:2));
        }
        return list;
    }
    public static List<Order> getOrder(){
   
   
        List<Order> list=new ArrayList<>();
        for (int i = 1; i <=3 ; i++) {
   
   
            list.add(new Order().id(i).name("物品"+i));
        }
        return list;
    }



    public Integer getId() {
   
   
        return id;
    }

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

    public String getName() {
   
   
        return name;
    }

    public void setName(String name) {
   
   
        this.name = name;
    }

    public int getSex() {
   
   
        return sex;
    }

    public void setSex(int sex) {
   
   
        this.sex = sex;
    }

    public Date getBir() {
   
   
        return bir;
    }

    public void setBir(Date bir) {
   
   
        this.bir = bir;
    }

    public Date getBir2() {
   
   
        return bir2;
    }

    public void setBir2(Date bir2) {
   
   
        this.bir2 = bir2;
    }

    public String getImg() {
   
   
        return img;
    }

    public void setImg(String img) {
   
   
        this.img = img;
    }

    public byte[] getImg1() {
   
   
        return img1;
    }

    public void setImg1(byte[] img1) {
   
   
        this.img1 = img1;
    }

    public Card getCard() {
   
   
        return card;
    }

    public void setCard(Card card) {
   
   
        this.card = card;
    }

    public List<Order> getOrders() {
   
   
        return orders;
    }

    public void setOrders(List<Order> orders) {
   
   
        this.orders = orders;
    }
    //校验文件目录
    public static String existsDir(){
   
   
        String dir="D:/eazyPoi/";
        File savefile = new File(dir);
        if 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值