本文主要是介绍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导入导出功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!