easyexcel、easypoi对比以及springboot集成实现导入导出excel功能

目录

对比:

相同点:

不同点

功能方面:

性能方面

代码方面:

建议:

示例

easypoi

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("导出失败!"));
        }
    }

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于使用Spring Boot和EasyExcel实现Excel导入导出,你可以按照以下步骤进行操作: 1. 添加依赖:在你的Spring Boot项目的pom.xml文件中添加EasyExcel的依赖。 ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.11</version> </dependency> ``` 2. 创建实体类:创建一个实体类,用于映射Excel中的数据。 ```java public class User { private String name; private Integer age; // 省略 getter 和 setter 方法 } ``` 3. 导出Excel:使用EasyExcel提供的工具类进行导出操作。 ```java public void exportExcel(List<User> userList, HttpServletResponse response) throws IOException { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("用户列表", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); EasyExcel.write(response.getOutputStream(), User.class).sheet("用户列表").doWrite(userList); } ``` 4. 导入Excel:使用EasyExcel提供的监听器类进行导入操作。 ```java public void importExcel(MultipartFile file) throws IOException { EasyExcel.read(file.getInputStream(), User.class, new AnalysisEventListener<User>() { @Override public void invoke(User user, AnalysisContext context) { // 处理每一行数据 } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 所有数据处理完成后的操作 } }).sheet().doRead(); } ``` 以上就是使用Spring Boot和EasyExcel实现Excel导入导出的基本步骤。你可以根据自己的需求对代码进行适当的调整和扩展。希望对你有所帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值