当前位置: 首页 > article >正文

FastExcel:超越EasyExcel的新一代Excel处理工具

简介

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

FastExcel的特点

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

FastExcel使用方法详解

创建实体类和监听器
创建实体类

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

/**
 * @author 作者:TesterRoad
 * @time 创建时间:2024
 * @desc 公众号:测试工程师成长之路
 */
 
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文件的逐行读取,这对于处理大文件尤为重要,因为它可以避免内存溢出的问题。下面是一个事件监听器的示例,它在读取每行数据时将数据添加到列表中,并在所有数据读取完成后执行一些操作。

/**
 * @author 作者:TesterRoad
 * @time 创建时间:2024
 * @desc 公众号:测试工程师成长之路
 */
 
import cn.idev.excel.context.AnalysisContext;
import cn.idev.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;

public class BaseExcelListener<T> extends 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文件中。

/**
 * @author 作者:TesterRoad
 * @time 创建时间:2024
 * @desc 公众号:测试工程师成长之路
 */
 
// 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文件,并使用之前创建的监听器来处理读取到的数据。

/**
 * @author 作者:TesterRoad
 * @time 创建时间:2024
 * @desc 公众号:测试工程师成长之路
 */
 
// 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.class, baseExcelListener).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的区别

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

结论

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

来源:https://juejin.cn/post/7451871895753326626


http://www.kler.cn/a/463027.html

相关文章:

  • 数据库进阶教程之DDL语句(万字详解)
  • UniApp | 从入门到精通:开启全平台开发的大门
  • 智联视频超融合平台:电力行业的智能守护者
  • 使用 httputils + chronicle-bytes 实现金融级 java rpc
  • 【期末复习】一、操作系统概论
  • Formality:官方Tutorial(一)
  • Docker 安装与常用命令
  • 【C++笔记】反向迭代器和计算器的思路分析及其实现
  • cesium 小知识:PostProcessStage 和 PostProcessStageLibrary详解对比
  • 电脑找不到mfc110.dll文件要如何解决?Windows缺失mfc110.dll文件快速解决方法
  • 鸿蒙应用开发启航计划
  • 【算法题解】——自然数拆分问题
  • 7-11 第 k 大的整数**
  • 司南OpenCompass评测工具正式加入PyTorch Ecosystem
  • Linux的源码在Windows下解压时提示文件名字相同(重名)的原因及解决办法
  • 八、Vue 样式绑定
  • 安卓触摸事件的传递
  • 电脑有杂音滋滋滋响怎么处理?电脑有杂音解决指南
  • 【信息系统项目管理师】第14章:项目沟通管理过程详解
  • 【vim】vim常用操作总结
  • 深入解析JVM调优工具及其实战应用
  • 软件测试面试八股文,查漏补缺(附文档)
  • latex与word优缺点对比
  • Python基于卷积神经网络的车牌识别系统开发与实现
  • MAC环境安装(卸载)软件
  • C++算法练习day73——45.跳跃游戏2