EasyExcel做简单的导入导出

本文介绍使用EasyExcel实现Excel数据的导入与导出功能,包括依赖配置、实体类及监听器的设计,并提供了简单的导入导出示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EasyExcel做简单的导入导出

Y.准备
excel表
在这里插入图片描述

代码+测试(idea+postman)
在这里插入图片描述

E.代码部分

E-Y. pom导包

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

E-E. TestProperty EasyExcel模板文件

@Data
public class TestProperty {
    @ExcelProperty(value = "ID", index = 0)
    private Long id;
    @ExcelProperty(value = "名字", index = 1)
    private String name;
    @ExcelProperty(value = "年龄", index = 2)
    private Integer age;
}

E-S. EasyExcelListener自定义事件监听类继承AnalysisEventListener

public final class EasyExcelListener<T> extends AnalysisEventListener<T>{
    /**
     * 自定义用于暂时存储data
     * 可以通过实例获取该值
     */
    private List<T> datas = new ArrayList<>();
    /**
     * 每解析一行都会回调invoke()方法
     * @param object  读取后的数据对象
     * @param context 内容
     */
    @Override
    @SuppressWarnings("unchecked")
    public void invoke(Object object, AnalysisContext context) {
        T map = (T) object;
        //数据存储到list,供批量处理,或后续自己业务逻辑处理。
        datas.add(map);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        //解析结束销毁不用的资源
        //注意不要调用datas.clear(),否则getDatas为null
    }
    /**
     * 返回数据
     * @return 返回读取的数据集合
     **/
    public List<T> getDatas() {
        return datas;
    }
    /**
     * 设置读取的数据集合
     * @param datas 设置读取的数据集合
     **/
    public void setDatas(List<T> datas) {
        this.datas = datas;
    }
}

E-++S++. Excel数据简单导入

@PostMapping(value = "/import")
    public List<TestProperty> importEntity(MultipartFile file) throws IOException {
        TestPropertyListener<TestProperty> listener = new TestPropertyListener<>();
        //headRowNumber(1)从第2行开始读取
        ExcelReader excelReader= EasyExcel.read(file.getInputStream(), TestProperty.class, listener).headRowNumber(1).build();
        excelReader.readAll();
        List<TestProperty> list=listener.getDatas();
        //根据list做业务逻辑处理
        System.out.println(list);
        return list;
    }

E-W. Excel数据简单导出 生成excel表 返回本地文件路径(服务器请自行修改)

@PostMapping(value = "/export")
    public String importEntity() {
        //组装数据
        List<TestProperty> pros = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            TestProperty te = new TestProperty();
            te.setAge(23);
            te.setId((long) Math.abs(UUID.randomUUID().hashCode()));
            te.setName("a" + i);
        }
        //生成excel
        try {
            String fileName = "excel-" + UUID.randomUUID().toString().replace("-","") + ".xlsx";
            String tempPath = Thread.currentThread().getContextClassLoader().getResource("").getPath() + "tempFile/";
            File outfile = new File(tempPath);
            if (!outfile.exists()) {
                boolean isMakDir = outfile.mkdirs();
                if (isMakDir) {
                    System.out.println("===创建文件夹成功");
                }
            }
            String filePath = tempPath + fileName;
            //生成excel
            EasyExcel.write(filePath, TestProperty.class).sheet("sheet").doWrite(pros);
            System.out.println(filePath);
            return filePath;
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            //关闭流
        }
        return null;
    }

S.额外部分

Data注解包

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值