当前位置: 首页 > news >正文

POI从入门到上手(三)-轻松完成EasyExcel使用,完成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 灵活。

一、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.是不是超级简单.有任何问题欢迎留言哦!!!

重点!重点!重点!

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

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

http://www.xdnf.cn/news/242065.html

相关文章:

  • 第 11 届蓝桥杯 C++ 青少组中 / 高级组省赛 2020 年真题,选择题详细解释
  • WPF使用SQLSugar和Nlog
  • 精品推荐-湖仓一体电商数据分析平台实践教程合集(视频教程+设计文档+完整项目代码)
  • OpenHarmony全局资源调度管控子系统之内存管理部件
  • 【STM32单片机】#12 SPI通信(软件读写)
  • IRF2.0IRF3.1
  • 小白dockerfile
  • Linux安全清理删除目录bash脚本
  • 使用scipy求解优化问题
  • Three.js在vue中的使用(一)-基础
  • 报错:函数或变量 ‘calcmie‘ 无法识别。
  • 【网络服务器】——回声服务器(echo)
  • 【C++】类和对象【中下】
  • 【中间件】bthread_基础_TaskControl
  • PyTorch 与 TensorFlow:深度学习框架的深度剖析与实战对比
  • 怎么查看数据库容量
  • REST API、FastAPI与Flask API的对比分析
  • cdn服务器连接异常怎么办?cdn连接失败解决方法有哪些?
  • 深入解析 Python 应用日志监控:ELK、Graylog 的实战指南
  • WPF采集欧姆龙PLC、基恩士PLC、西门子PLC、汇川PLC、台达PLC数据
  • 从请求到响应:初探spring web
  • PCA主成分分析法(最大投影方差,最小重构距离,SVD角度)
  • AI数字人系统开发:技术架构、应用场景与未来趋势
  • 【进阶】--函数栈帧的创建和销毁详解
  • TDA4VM SDK J721E (RTOS/Linux) bootloaders梳理笔记
  • RDMA高性能网络通信实践
  • 航空客户价值分析阶段性测验
  • Python数据分析课程实验-1
  • 使用DCI和RTIT技术进行精准调优--看录像
  • C++之特殊类设计及类型转换