LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

FastExcel:超越 EasyExcel 的新一代 Excel 处理神器

admin
2025年1月18日 7:45 本文热度 50

简介

FastExcel是由原EasyExcel作者在阿里巴巴宣布停止维护EasyExcel之后推出的升级版框架。它继承了EasyExcel的所有优点,并且在性能和功能上进行了显著的提升和创新。

FastExcel的特点

  • 高性能读写: FastExcel专注于性能优化,能够高效处理大规模的Excel数据,显著降低内存占用。
  • 简单易用: 提供了简洁直观的API,使得开发者可以轻松集成到项目中,无论是简单的Excel操作还是复杂的数据处理都能快速上手。
  • 流式操作: 支持流式读取,将一次性加载大量数据的问题降到最低,特别适合处理数十万甚至上百万行的数据。
  • 完全兼容: 完全兼容原EasyExcel的所有功能和特性,用户可以无缝过渡。
  • 持续更新: FastExcel会持续更新,修复bug,优化性能,增加新功能。

FastExcel使用方法详解

创建实体类和监听器

  • 创建实体类

在使用FastExcel进行Excel文件的读写操作之前,需要定义一个实体类,该类中的每个属性对应Excel中的一列。使用@ExcelProperty注解来指定列名。

import cn.idev.excel.annotation.ExcelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Setter
@Getter
@ToString
public class User {
    @ExcelProperty("编号")
    private Integer id;
    @ExcelProperty("名字")
    private String name;
    @ExcelProperty("年龄")
    private Integer age;
}
  • 创建事件监听器

FastExcel通过事件监听器实现Excel文件的逐行读取,这对于处理大文件尤为重要,因为它可以避免内存溢出的问题。下面是一个事件监听器的示例,它在读取每行数据时将数据添加到列表中,并在所有数据读取完成后执行一些操作。

import cn.idev.excel.context.AnalysisContext;
import cn.idev.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;

public class BaseExcelListener<Textends AnalysisEventListener<T{
    private List<T> dataList = new ArrayList<>();

    @Override
    public void invoke(T t, AnalysisContext analysisContext) {
        dataList.add(t);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("读取完成,共读取了 " + dataList.size() + " 条数据");
    }

    public List<T> getDataList() {
        return dataList;
    }
}

实现写入和读取功能

  • Excel写入功能

以下是使用FastExcel进行Excel写入的示例代码。首先,创建测试数据,然后通过FastExcel.write方法将数据写入到Excel文件中。

// Excel写入功能
@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setCharacterEncoding("utf-8");
    String fileName = URLEncoder.encode("test""UTF-8");
    response.setHeader("Content-disposition",
                       "attachment;filename*=utf-8''" + fileName + ".xlsx");
    // 写入数据
    FastExcel.write(response.getOutputStream(), User.class)
    .sheet("模板")
    .doWrite(buildData())
;
}

// 创建测试数据
private List<User> buildData() {
    User user1 = new User();
    user1.setId(1);
    user1.setName("张三");
    user1.setAge(18);
    User user2 = new User();
    user2.setId(2);
    user2.setName("李四");
    user2.setAge(19);
    return List.of(user1, user2);
}
  • Excel读取功能

以下是使用FastExcel进行Excel读取的示例代码。通过FastExcel.read方法读取Excel文件,并使用之前创建的监听器来处理读取到的数据。

// Excel读取功能
@PostMapping("/upload")
public ResponseEntity<String> upload(@RequestParam("file") MultipartFile file) {
    if (file.isEmpty()) {
        return ResponseEntity.badRequest().body("请选择一个文件上传!");
    }
    try {
        BaseExcelListener<User> baseExcelListener = new BaseExcelListener<>();
        FastExcel.read(file.getInputStream(), User.classbaseExcelListener).sheet().doRead();
        List<User> dataList = baseExcelListener.getDataList();
        System.out.println(dataList);
        return ResponseEntity.ok("文件上传并处理成功!");
    } catch (IOException e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件处理失败!");
    }
}

Excel转换为PDF

FastExcel还支持将Excel文件转换为PDF文件,这一功能底层依赖于Apache POI和itext-pdf。请注意,使用itext-pdf时需要确保符合其许可证要求。

FastExcel.convertToPdf(new File("excelFile"),new File("pdfFile"),null,null);

小结

FastExcel作为一个高效且易于使用的Excel处理工具,不仅继承了EasyExcel的所有优点,还在此基础上进行了性能和功能的增强。

通过上述示例,我们可以看到FastExcel如何简化Excel文件的读写操作,以及如何通过事件监听器实现流式处理,从而有效管理内存使用。无论是企业数据导入导出还是个人项目开发,FastExcel都能提供强大的支持。

FastExcel与EasyExcel的区别

  • 性能提升: FastExcel在性能上比EasyExcel更好,更稳定。
  • API一致性: FastExcel与EasyExcel的API完全一致,可以无缝切换。
  • 功能增加: FastExcel 1.0.0版本新增了读取Excel指定行数和将Excel转换为PDF的功能。

结论

FastExcel作为一个轻量级但功能强大的Java库,专为需要高性能和低内存占用的Excel文件处理而设计。如果您的项目需要处理大规模的Excel数据,FastExcel无疑是一个值得考虑的选择。其流式处理和灵活的API使其成为处理Excel文件的理想工具。

作者:拉满buff搞代码
来源:juejin.cn/post/7451871895753326626


END


阅读原文:原文链接


该文章在 2025/1/18 11:09:48 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved