FastExcel的使用

前言

FastExcel 是一款基于 Java 的开源库,旨在提供快速、简洁且能解决大文件内存溢出问题的 Excel 处理工具。它兼容 EasyExcel,提供性能优化、bug 修复,并新增了如读取指定行数和将 Excel 转换为 PDF 的功能。

FastExcel 的主要功能

  • 高性能读写:FastExcel 专注于性能优化,能高效处理大规模 Excel 数据,显著降低内存占用。
  • 简单易用:提供简洁直观的 API,易于集成和使用。
  • 流式操作:支持流式读取,减少一次性加载大量数据的问题。
  • 读取指定行数:可以根据需求,只读取感兴趣的部分数据,提高数据处理效率。
  • Excel 转换为 PDF:支持直接将 Excel 文件转换为 PDF,满足多样化的文档输出需求。

FastExcel 的技术原理

  • 内存优化:基于流式读取技术,不需要一次性将整个 Excel 文件加载到内存中,逐行或逐块读取数据。
  • 事件驱动模型 :基于实现 ReadListener 接口处理读取操作。当读取到数据时,会触发接口中的方法,如 invoke 方法,支持开发者对每行数据进行即时处理。
  • 注解映射:用注解将 Excel 文件中的列与 Java 对象的属性进行映射。开发者能轻松地将 Excel 数据转换为 Java 对象,同时也支持反向操作,将 Java 对象写入 Excel。

代码结构如图所示

读取 Excel 文件

复制代码
package cn.itcast.hotel.excel;

import cn.idev.excel.FastExcel;
import cn.idev.excel.context.AnalysisContext;
import cn.idev.excel.read.listener.ReadListener;
import cn.idev.excel.support.ExcelTypeEnum;
import com.alibaba.fastjson.JSON;

/**
 * 实现 ReadListener 接口,设置读取数据的操作
 */
public class ReadExcelDataListener implements ReadListener<DemoData> {

    @Override
    public void invoke(DemoData demoData, AnalysisContext analysisContext) {
        System.out.println("解析到一条数据" + JSON.toJSONString(demoData));
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("所有数据解析完成!");
    }

    public static void main(String[] args) {
        String fileName = "E:\\tools\\es\\hotel-admin\\src\\main\\resources\\excel\\demo.xlsx";
        System.out.println("File path: " + fileName);
        FastExcel.read(fileName, DemoData.class, new ReadExcelDataListener()).sheet().doRead();
    }
}

创建 /生成 Excel 文件

复制代码
package cn.itcast.hotel.excel;

import cn.idev.excel.FastExcel;

import java.util.ArrayList;
import java.util.List;

public class WriteExcelDataListener {
    static List<DemoData> list = new ArrayList<>();

    public static List<DemoData> genData(int num) {
        for (int i = 0; i < num; i++) {
            DemoData demoData = new DemoData();
            demoData.setDate(202401 + "" + i);
            demoData.setDoubleData("日期" + i);
            demoData.setTitle("标题:" + i);
            list.add(demoData);
        }
        return list;
    }

    public static void main(String[] args) {
        List<DemoData> demoData = genData(10);
        String fileName = "E:\\tools\\es\\hotel-admin\\src\\main\\resources\\excel\\demo.xlsx";
        FastExcel.write(fileName, DemoData.class).sheet().doWrite(demoData);
    }
}

好了 至此 FastExcel的使用 点点关注不迷路 老铁们!!!!!

相关推荐
echoyu.1 天前
消息队列-初识kafka
java·分布式·后端·spring cloud·中间件·架构·kafka
AAA修煤气灶刘哥1 天前
缓存这「加速神器」从入门到填坑,看完再也不被产品怼慢
java·redis·spring cloud
AAA修煤气灶刘哥1 天前
接口又被冲崩了?Sentinel 这 4 种限流算法,帮你守住后端『流量安全阀』
后端·算法·spring cloud
T_Ghost1 天前
SpringCloud微服务服务容错机制Sentinel熔断器
spring cloud·微服务·sentinel
喂完待续2 天前
【序列晋升】28 云原生时代的消息驱动架构 Spring Cloud Stream的未来可能性
spring cloud·微服务·云原生·重构·架构·big data·序列晋升
惜.己2 天前
Docker启动失败 Failed to start Docker Application Container Engine.
spring cloud·docker·eureka
chenrui3102 天前
Spring Boot 和 Spring Cloud: 区别与联系
spring boot·后端·spring cloud
喂完待续3 天前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升
麦兜*3 天前
MongoDB 性能调优:十大实战经验总结 详细介绍
数据库·spring boot·mongodb·spring cloud·缓存·硬件架构