Java 使用 EasyExcel 实现导入导出(新手篇教程)

官网镇楼↓,觉得我写的不好的同学可以去官网看哦

EasyExcel

Maven

复制代码
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.3</version>
</dependency>

Excel 导入

示例:

如上一个简易 Excel 表格,表头占了两行,且第三列开始才为有效数据,那么我们应该如何导入?

建造实体类

首先无论是导入还是导出,都需要先建对应的实体类

如图所示,因为我的示例 Excel 一共需要读13列信息,所以定义了13个字段,统一用 String 类型接受

你需要做的就是以列为字段建造一个接受信息的实体类

并且在每一个字段上加上 @ExcelProperty 注解

这个注解内容对应你的列信息,支持以索引、名称的方式关联列信息

  • 如果你想让这个字段读取第 6 列的值

@ExcelProperty(index = 6)

  • 如果你想让这个字段读取某个列名的值

@ExcelProperty(value = "训练类型标签")

开始读取

建造好实体类后就可以开始读取了

如果看不懂只想运行,只需要拷贝代码,更改我注释的地方即可

java 复制代码
//指定你需要读取的文件路径
String fileName = "D:\\MCLDownload\\test.xlsx";

        //修改为你的实体类名        
        EasyExcel.read(fileName, ActionExcelEntity.class, new ReadListener<ActionExcelEntity>() {
            /**
             * 读取 10 行保存一次
             */
            public static final int BATCH_COUNT = 10;
            
            private List<ActionExcelEntity> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);

            @Override
            public void invoke(ActionExcelEntity data, AnalysisContext context) {
                cachedDataList.add(data);
                if (cachedDataList.size() >= BATCH_COUNT) {
                    try {
                        saveData(cachedDataList);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                    cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
                }
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
                try {
                    saveData(cachedDataList);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

            //得到解析数据 --> 处理 --> 存储数据库
            //这个 List 的容量就是上面定义的 10 
            //在这里进行你想要的操作
            private void saveData(List<ActionExcelEntity> cachedDataList) throws             
   IOException {
                    //遍历集合,调用你的 mapper 存到数据库
                    log.info("存储数据库成功!");
                }
        //这个 2 代表行头,意味着跳过行头直接从第3行开始读
        }).sheet().headRowNumber(2).doRead();
    }

导出数据

同样的先建造实体类

建实体类

与导入不同的是你需要手动指定每个字段对应的列号,使用 @ExcelProperty 的 value 和 index指定列名称和列顺序(从0开始)

如果需要导出时间,参考图片中的支付时间列

也可以使用 @ColumnWidth 列宽和 @ContentRowHeight(25) 行高 和 @HeadRowHeight(50) 表头高

代码导出

最后代码导出

java 复制代码
//需要导出的路径
String fileName = "D:\\MCLDownload\\" + name + ".xls";
        EasyExcel.write(fileName, FeiShuExcelEntity.class)
                .sheet("模板")
                .doWrite(() -> {
                    //list 代表你想输出的类集合,每个元素都是一行
                    return list;
                });
相关推荐
懒大王爱吃狼1 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷2 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
阿伟*rui2 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel
待磨的钝刨2 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
XiaoLeisj4 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck4 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei4 小时前
java的类加载机制的学习
java·学习
励志成为嵌入式工程师5 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉5 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer5 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法