当前位置: 代码网 > it编程>编程语言>Java > POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

2025年05月08日 Java 我要评论
前言:apache poi 是一个流行的 java 库,用于处理 microsoft office 格式文件,提供丰富 api 来创建、读取和修改 office 文档。1.官网:apache p

前言:

apache poi

        是一个流行的 java 库,用于处理 microsoft office 格式文件,提供丰富 api 来创建、读取和修改 office 文档。

1.官网apache poi™ - the java api for microsoft documents

2.优点:功能强大,可处理复杂 excel 文件;稳定性高,受广泛支持与维护;灵活性好,能满足定制需求。

3.缺点:学习曲线陡,对初学者成本高;处理大量数据时性能受影响。

easypoi

        主打功能简单易用,通过简单注解和模板语言就能实现 excel 导出、导入、word 模板导出等功能。

1.官网https://gitee.com/lemur/easypoi

2.优点:api 接口简洁,操作便捷;功能丰富,支持多种操作;基于 apache poi 和 jexcelapi,易于扩展;文档详细,便于学习使用。

3.缺点:与 apache poi 相比,高级功能有限;因封装层存在,处理大量数据有性能损耗。

easyexcel

        是阿里巴巴基于 apache poi 封装的开源框架,专注 excel 文件读写。

1.官网easyexcel官方文档 - 基于java的excel处理工具 | easy excel 官网

2.优点:api 简洁,使用方便;处理大量数据时性能高;支持注解配置导入导出规则,简化开发。

3.缺点:相比 apache poi,功能简单,无法满足复杂需求;定制化能力不如 apache poi 灵活。

一、easyexcel

       easyexcel 是阿里巴巴开源的一个基于 java 的简单、省内存的读写 excel 工具。在处理大文件时,它能极大地减少内存占用,并且使用起来相对简单。

1.1、核心特性

内存占用少:采用逐行读取和写入的方式,无需将整个 excel 文件加载到内存中,避免了内存溢出问题,适合处理大数据量的 excel 文件。例如在处理包含数万条数据的 excel 文件时,传统方式可能会导致内存不足,而 easyexcel 可以轻松应对。

api 简单:提供了简洁的 api,通过注解就能完成 excel 数据的读写映射,降低了开发成本和学习成本。开发人员只需简单配置注解,就能实现数据与 excel 单元格的映射。

功能丰富:支持 excel 的导入导出、数据校验、自定义格式等功能,还能处理复杂表头和多级表头。

性能高效:在读写性能上表现出色,能够快速处理大量数据,提高程序的执行效率。

1.2、常用注解

@excelproperty:用于指定 excel 列的表头名称、顺序等信息,是最常用的注解。可以通过 value 属性指定表头名称,通过 index 属性指定列的索引。

@datetimeformat:用于格式化日期类型的数据。例如 @datetimeformat("yyyy-mm-dd") 可以将日期格式化为指定的字符串。

@numberformat:用于格式化数字类型的数据。例如 @numberformat("#.##%") 可以将数字格式化为百分比形式。

1.3、使用步骤

1.3.1、引入依赖

<dependency>
    <groupid>com.alibaba</groupid>
    <artifactid>easyexcel</artifactid>
    <version>3.3.2</version>
</dependency>

1.3.2、创建实体对象

@data
public class sysuserdata {
    @excelproperty("用户姓名")
    private string uname;
    @excelproperty("真实姓名")
    private string iphone;
    @excelproperty("用户名")
    private string realname;
    @excelproperty("密码")
    private string ipassword;
    @excelproperty("登陆ip")
    private string lastloginip;
    @excelproperty("登录时间")
    private string lastlogintime;
    @excelproperty("登陆次数")
    private string logintimes;
    @excelproperty("账号状态")
    private int state;
}

1.3.3、导入

/**
     * easyexcl
     * 导入excel
     * @return
     */
    @requestmapping(value = "/easyexcelimport")
    public list<sysuser> easyexcelimport() {
        list<sysuser> ulist = null;
        try {
            ulist = new arraylist<>();
            string filepath = "/users/admin/desktop/user.xlsx";
            list<sysuserdata> userlist = easyexcel.read(filepath).head(sysuserdata.class).sheet().doreadsync();
            for (sysuserdata user : userlist) {
                sysuser sysuser = new sysuser();
                sysuser.setuname(user.getuname());
                sysuser.setrealname(user.getrealname());
                sysuser.setiphone(user.getiphone());
                sysuser.setipassword(user.getipassword());
                sysuser.setlastloginip(user.getlastloginip());
                sysuser.setlastlogintime(dateutils.datetimetotimestamp(string.valueof(user.getlastlogintime())));
                sysuser.setlogintimes(user.getlogintimes());
                sysuser.setstate(user.getstate());
                userservice.adduser(sysuser);
                ulist.add(sysuser);
            }
        } catch (exception e) {
            e.printstacktrace();
        }
        return ulist;
    }

1.3.4、导出

 /**
     * easyexcel
     * 导出
     * @param response
     * @throws ioexception
     */
    @requestmapping(value = "/easyexcelwrite")
    public void easyexcelwrite(httpservletresponse response) throws ioexception {
        response.setcharacterencoding("utf-8");
        long timestamp = system.currenttimemillis() / 1000;
        string filename = "用户信息_" + timestamp + ".xlsx";
        string encodedfilename = urlencoder.encode(filename, "utf-8");
        response.setheader("content-disposition", "attachment;filename*=utf-8''" + encodedfilename);
        list<sysuserdata> datalist = new arraylist<sysuserdata>();
        // 数据
        list<sysuser> userlist = userservice.userlist();
        for (sysuser user : userlist) {
            sysuserdata sysuserdata = new sysuserdata();
            sysuserdata.setuname(user.getuname());
            sysuserdata.setrealname(user.getrealname());
            sysuserdata.setiphone(user.getiphone());
            sysuserdata.setipassword(user.getipassword());
            sysuserdata.setlastloginip(user.getlastloginip());
            sysuserdata.setlastlogintime(dateutils.timestamptodatetime(user.getlastlogintime()));
            sysuserdata.setlogintimes(user.getlogintimes());
            sysuserdata.setstate(user.getstate());
            datalist.add(sysuserdata);
        }
        horizontalcellstylestrategy horizontalcellstylestrategy = new horizontalcellstylestrategy(styleutils.getheadstyle(), styleutils.getcontentstyle());
        try (
        excelwriter excelwriter = easyexcel.write(response.getoutputstream(), sysuserdata.class)
                .registerwritehandler(new cellwritewidthconfig()) // 自适应列宽
                .registerwritehandler(new cellwriteheightconfig()) // 自适应行高
                .registerwritehandler(horizontalcellstylestrategy)
                .build()) {
            excelwriter.write(datalist, easyexcel.writersheet("用户信息").build());
        }catch (ioexception e) {
            throw new runtimeexception(e);
        }
    }

通过以上内容便可轻轻松松使用easyexcel.是不是超级简单.有任何问题欢迎留言哦!!!

到此这篇关于poi从入门到实战轻松完成easyexcel使用,完成excel导入导出.的文章就介绍到这了,更多相关poi easyexcel使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com