前言:
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)