easyexcel、easypoi对比以及springboot集成实现导入导出excel功能
easyexcel
快速、简洁、解决大文件内存溢出的java处理Excel工具
项目地址:https://gitcode.com/gh_mirrors/ea/easyexcel
免费下载资源
·
目录
最近项目中有需要导出一下excel的需求,这边找了两种常用的工具easyexcel、easypoi,以下对比一下这两个工具类的优缺点及对比。
对比:
相同点:
easypoi和easyexcel都是基于apache poi进行二次开发的。底层都是依赖的 apache poi。
两者都是可以基于实体类的注解配置来控制导入导出
不同点
EasyExcel是一款阿里开源的Excel导入导出工具,具有处理快速、占用内存小、使用方便的特点
功能方面:
easypoi 功能更加强大,对定制化的导出支持非常的丰富
easyexcel对于实现枚举类型到字符串的转换,需要自定义转换器;对于一些嵌套的一对多对象的导出,需要自定义合并策略,
性能方面
easypoi的解析方式是dom解析,把结果一次都读入内存操作,这样的操作平时是不会有问题的,但是并发量上来的时候就会出现OOM
easyexcel运用的SAX的解析方式,数据量比较大的时候,easyexcel 速度有着明显优势
代码方面:
easypoi导出:
最终是生成了一个 Workbook 对象,由我们自己来输出流下载,较为灵活
Workbook workbook = ExcelExportUtil.exportExcel(params, MaterialOutputExportVO.class, list);
ServletOutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
easyexcel导出
直接提供了导出+下载的方法,较为方便
EasyExcel.write(response.getOutputStream(),pojoClass).includeColumnFieldNames(includeColumnFieldNames).autoCloseStream(Boolean.TRUE).sheet(sheetName).doWrite(dataSet);
建议:
依据当前项目需求,如果并发量不大、数据量也不大,但是需要导出 excel 的文件样式千差万别,那么推荐用 easypoi;反之,使用 easyexcel 。
示例
下面附上两种框架的示例
easypoi
domain
将宽度之类的放在了一个注解配置上
@Data
public class EMAbnormalRecordContentVO {
@Excel(name = "编码", isImportField = "true", width = 20)
private String taskCode;
@Excel(name = "名称", isImportField = "true")
private String userName;
}
导出:
List<UserInfo> list = findVoList();
ExportParams params = new ExportParams(null, "用户");
#可以设置样式和样式文件
params.setType(ExcelType.XSSF);
params.setStyle(EquipExcelStyle.class);
Workbook workbook = ExcelExportUtil.exportExcel(params, EMAbnormalRecordContentVO.class, voList);
easyexcel
domain
包含列宽之类的设置
@Data
@ColumnWidth(20)
@HeadRowHeight(20)
public class EquipmentExportVO {
@ExcelProperty("工程名称")
private String projectName;
@ExcelProperty("工程编号")
private String projectCode;
}
导出
public void export(String sheetName, String fileName, Class<?> pojoClass, Collection<?> dataSet, Collection<String> includeColumnFieldNames, HttpServletResponse response) {
try {
response.setCharacterEncoding("utf-8");
String filename = URLEncoder.encode(fileName, StandardCharsets.UTF_8).replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename=" + filename + ".xlsx");
response.setHeader("filename", filename + ".xlsx");
if (!CollectionUtils.isEmpty(includeColumnFieldNames)) {
EasyExcel.write(response.getOutputStream(), pojoClass).includeColumnFieldNames(includeColumnFieldNames).autoCloseStream(Boolean.TRUE).sheet(sheetName).doWrite(dataSet);
} else {
EasyExcel.write(response.getOutputStream(), pojoClass).autoCloseStream(Boolean.TRUE).sheet().doWrite(dataSet);
}
} catch (IOException e) {
throw new RuntimeException("导出失败!");
//response.getWriter().println(ReturnVO.failed("导出失败!"));
}
}
GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:2 个月前 )
c42183df
Bugfix 2 个月前
efa7dff6 * 重新加回 `commons-io`
2 个月前
更多推荐
已为社区贡献6条内容
所有评论(0)