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

FastExcel:高性能Excel处理框架

FastExcel:高性能Excel处理框架的全面解析

引言

FastExcel 是由原 EasyExcel 作者在阿里巴巴宣布停止维护 EasyExcel 后推出的升级版框架。

它不仅继承了 EasyExcel 的所有优点,还在性能和功能上进行了显著的提升和创新。

本文将深入探讨 FastExcel 的特点、使用方法及其与 EasyExcel 的区别,帮助开发者更好地理解和使用这一工具。

FastExcel 的核心特点

高性能读写

FastExcel 专注于性能优化,能够高效处理大规模的 Excel 数据,显著降低内存占用。

无论是读取还是写入,FastExcel 都表现出色,尤其适合处理数十万甚至上百万行的数据。

简单易用

FastExcel 提供了简洁直观的 API,使得开发者可以轻松集成到项目中。

无论是简单的 Excel 操作还是复杂的数据处理,FastExcel 都能快速上手。

流式操作

通过流式读取,FastExcel 将一次性加载大量数据的问题降到最低,特别适合处理大规模数据。

这种设计有效避免了内存溢出的风险。

完全兼容

FastExcel 完全兼容原 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 Employee {
    @ExcelProperty("员工编号")
    private Integer employeeId;
    @ExcelProperty("员工姓名")
    private String employeeName;
    @ExcelProperty("员工年龄")
    private Integer employeeAge;
}

事件监听器

FastExcel 通过事件监听器实现 Excel 文件的逐行读取,这对于处理大文件尤为重要。

以下是一个事件监听器的示例:

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

public class EmployeeDataListener<T> extends AnalysisEventListener<T> {
private List<T> employeeRecords = new ArrayList<>();

    @Override
    public void invoke(T record, AnalysisContext context) {
        employeeRecords.add(record);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("数据读取完成,共读取了 " + employeeRecords.size() + " 条员工记录");
    }

    public List<T> getEmployeeRecords() {
        return employeeRecords;
    }
}

实现写入和读取功能

Excel 写入功能

以下是使用 FastExcel 进行 Excel 写入的示例代码。

首先,创建测试数据,然后通过 FastExcel.write 方法将数据写入到 Excel 文件中。


@GetMapping("/exportEmployees")
public void exportEmployees(HttpServletResponse httpResponse) throws IOException {
    httpResponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    httpResponse.setCharacterEncoding("utf-8");
    String outputFileName = URLEncoder.encode("员工数据", "UTF-8");
    httpResponse.setHeader("Content-disposition", "attachment;filename*=utf-8''" + outputFileName + ".xlsx");
    // 写入数据
    FastExcel.write(httpResponse.getOutputStream(), Employee.class)
        .sheet("员工信息")
        .doWrite(generateEmployeeData());
}

// 生成测试数据
private List<Employee> generateEmployeeData() {
    Employee employee1 = new Employee();
    employee1.setEmployeeId(101);
    employee1.setEmployeeName("王五");
    employee1.setEmployeeAge(28);
    Employee employee2 = new Employee();
    employee2.setEmployeeId(102);
    employee2.setEmployeeName("赵六");
    employee2.setEmployeeAge(32);
    return List.of(employee1, employee2);
}

Excel 读取功能

以下是使用 FastExcel 进行 Excel 读取的示例代码。

通过 FastExcel.read 方法读取 Excel 文件,并使用之前创建的监听器来处理读取到的数据。


@PostMapping("/importEmployees")
public ResponseEntity<String> importEmployees(@RequestParam("employeeFile") MultipartFile employeeFile) {
    if (employeeFile.isEmpty()) {
        return ResponseEntity.badRequest().body("请上传一个有效的文件!");
    }
    try {
        EmployeeDataListener<Employee> employeeListener = new EmployeeDataListener<>();
        FastExcel.read(employeeFile.getInputStream(), Employee.class, employeeListener).sheet().doRead();
        List<Employee> employeeRecords = employeeListener.getEmployeeRecords();
        System.out.println(employeeRecords);
        return ResponseEntity.ok("员工数据文件上传并处理成功!");
    } catch (IOException e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件处理失败!");
    }
}

Excel 转换为 PDF

FastExcel 还支持将 Excel 文件转换为 PDF 文件,这一功能底层依赖于 Apache POIitext-pdf

需要注意的是,使用 itext-pdf 时需要确保符合其许可证要求。


FastExcel.convertToPdf(new File("员工数据.xlsx"), new File("员工数据.pdf"), null, null);

FastExcel 与 EasyExcel 的区别

性能提升

FastExcel 在性能上比 EasyExcel 更好,更稳定,尤其是在处理大规模数据时表现尤为突出。

API 一致性

FastExcelEasyExcel 的 API 完全一致,用户可以无缝切换,无需重新学习。

功能增加

FastExcel 1.0.0 版本新增了读取 Excel 指定行数和将 Excel 转换为 PDF 的功能,进一步扩展了其应用场景。

总结

FastExcel 作为一个轻量级但功能强大的 Java 库,专为需要高性能和低内存占用的 Excel 文件处理而设计。

其流式处理和灵活的 API 使其成为处理 Excel 文件的理想工具。

无论是企业数据导入导出还是个人项目开发,FastExcel 都能提供强大的支持。

– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。


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

相关文章:

  • Linux内存管理(Linux内存架构,malloc,slab的实现)
  • 速通Docker === 网络
  • 靶机复现-pikachu靶机文件包含漏洞
  • Lsky-Pro在线图片搭建教程(Docker部署方式)
  • 人工智能之深度学习_[4]-神经网络入门
  • simulink入门学习01
  • Nacos 和 Zookeeper
  • Go语言通过Casbin配合MySQL和Gorm实现RBAC访问控制模型
  • ES的聚合:定义与技术特点
  • arkime和elasticsearch 安装方法三
  • 记录一次k8s起不来的排查过程
  • 营销2.0时代的挑战与开源AI智能名片2+1链动模式S2B2C商城小程序源码的解决方案
  • 15_业务系统基类
  • .gitignore配置忽略out目录
  • macOS安装Gradle环境
  • 移植前准备之git管理内核源码
  • Appium(四)
  • 【Android学习】Kotlin随笔
  • kafka学习笔记2 —— 筑梦之路
  • centos部署rabbitmq
  • Next.js:构建大模型智能体GPT研究者应用的 Web开发框架
  • GPU加速GWAS分析--quickdraw
  • Ada语言的软件工程
  • BUU UPLOAD COURSE 11
  • Github 2025-01-22 C开源项目日报 Top9
  • 每日一题-数组中的逆序对