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

本文主要是介绍POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O...

前言:

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.setRealChina编程Name(user.getRealName());
         www.chinasem.cn       sysUser.setIphone(user.getIphone());
                sysUser.setIpassword(user.getIpassword());
                sysUser.setLastloginip(user.getLastloginip());
     www.chinasem.cn           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
   ynyYqSlH  * @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(python));
        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使用内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154530

相关文章

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

python 常见数学公式函数使用详解(最新推荐)

《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

mysql查询使用_rowid虚拟列的示例

《mysql查询使用_rowid虚拟列的示例》MySQL中,_rowid是InnoDB虚拟列,用于无主键表的行ID查询,若存在主键或唯一列,则指向其,否则使用隐藏ID(不稳定),推荐使用ROW_NUM... 目录1. 基本查询(适用于没有主键的表)2. 检查表是否支持 _rowid3. 注意事项4. 最佳实

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺