POI从入门到上手(二)-轻松完成EasyPOI使用,完成Excel导入导出.

 前言:

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 灵活。

一、EasyPOI

1.1、主要特点

简单易用:提供了简洁的 API 和丰富的注解,通过在 Java 对象的字段上添加注解,如 @Excel、@ExcelCollection 等,即可实现数据与 Excel 单元格之间的映射,大大减少了代码量,即使不熟悉 Apache POI 的开发人员也能快速上手。

高性能:支持大数据量的 Excel 批量读写,并且能在后台线程中异步执行文件操作,不阻塞主线程,极大地提高了性能。

模板引擎支持:不仅能读写 Excel,还可以生成动态 Word 模板,只需定义好模板,然后填充数据即可生成对应的 Word 报告,适合报表生成场景。

灵活的扩展性:许开发者自定义处理器以满足特定需求,比如自定义样式、格式等,具有良好的扩展性。

稳定可靠:作为 Apache POI 的增强版,EasyPoi 已经在许多实际项目中得到验证,具有较好的稳定性。

1.2、常用注解

@Excel:用于指定 Excel 列的名称、顺序、格式等信息,是最常用的注解。

@ExcelCollection:用于处理一对多的关系,例如一个用户有多个订单。

@ExcelEntity:用于嵌套实体类的映射。

@ExcelTarget:用于指定 Excel 的目标标识,在存在多个实体类映射时使用。

1.3、使用步骤

1.3.1、引入依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

1.3.2、导入

@Data
@ExcelTarget("sysUserVo")
public class SysUserVo {

    @Excel(name = "用户姓名", orderNum = "1")
    private String uname;

    @Excel(name = "真实姓名", orderNum = "2")
    private String iphone;

    @Excel(name = "用户名", orderNum = "3")
    private String realName;

    @Excel(name = "密码", orderNum = "4")
    private String ipassword;

    @Excel(name = "登陆ip", orderNum = "5")
    private String lastloginip;

    @Excel(name = "登录时间", orderNum = "6", format = "yyyy-MM-dd HH:mm:ss", width = 20.0)
    private String lastlogintime;

    @Excel(name = "登陆次数", orderNum = "7")
    private String logintimes;

    @Excel(name = "账号状态", orderNum = "8")
    private int state;

}
/**
     * easyPoi
     * 导入excel
     * @return
     */
    @RequestMapping(value = "/easyPoiImportExcel")
    public List<SysUser> easyPoiImportExcel() {
        List<SysUser> uList = new ArrayList<>();
        try (FileInputStream file = new FileInputStream(new File("/Users/admin/Desktop/user.xlsx"))) {
            ImportParams params = new ImportParams();
            // 可以设置其他导入参数,如标题行数、表头行数等
            params.setTitleRows(1);
            params.setHeadRows(1);
            List<SysUserVo> userList = ExcelImportUtil.importExcel(file, SysUserVo.class, params);
            for (SysUserVo 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);
            }
            return uList;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return uList;
    }

1.3.3、导出

/**
     * easyPoi
     * 导出
     * @param response
     * @throws IOException
     */
    @RequestMapping(value = "/easyPoiExcelWrite")
    public void easyPoiExcelWrite(HttpServletResponse response) throws IOException {
        List<SysUserVo> data = new ArrayList<SysUserVo>();
        // 数据
        List<SysUser> userList = userService.userList();
        for (SysUser user : userList) {
            SysUserVo sysUserVo = new SysUserVo();
            sysUserVo.setUname(user.getUname());
            sysUserVo.setRealName(user.getRealName());
            sysUserVo.setIphone(user.getIphone());
            sysUserVo.setIpassword(user.getIpassword());
            sysUserVo.setLastloginip(user.getLastloginip());
            sysUserVo.setLastlogintime(DateUtils.TimestampToDateTime(user.getLastlogintime()));
            sysUserVo.setLogintimes(user.getLogintimes());
            sysUserVo.setState(user.getState());
            data.add(sysUserVo);
        }
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户信息表", "用户列表"), SysUserVo.class, data);
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-disposition", "attachment;filename=" + "user.xlsx");
        workbook.write(response.getOutputStream());
        workbook.close();
    }

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

重点!重点!重点!

遇到问题不用怕不如来我的知识库找找看,也许有意想不到的收获!!!

易网时代-易库资源-易库教程:.NET开发、Java开发、PHP开发、SqlServer技术、MySQL技术-开发资料大全-易网时代-易库资源-易库教程 (escdns.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值