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的使用 点点关注不迷路 老铁们!!!!!

相关推荐
行百里er17 小时前
Spring Insight 里上报 Span 为什么用 JDK HttpClient 而不是 RestTemplate
spring boot·spring cloud·监控
陈皮波比茶17 小时前
SpringCloudAlibaba
java·spring cloud·微服务
欢迎来到祖安!1 天前
企业微信 API 接口能力介绍:支持消息收发、图片发送、表情互动、联系人管理等多场景应用
java·前端·数据仓库·spring cloud·企业微信
行百里er2 天前
BlockingQueue:异步批量上报
spring boot·spring cloud·监控
wno7043 天前
Spring Cloud Hystrix Dashboard仪表盘
spring·spring cloud·hystrix
BUG指挥官3 天前
Redis已接入AI
数据库·人工智能·spring boot·redis·spring cloud
wno7043 天前
Spring Cloud Hystrix服务容错
spring·spring cloud·hystrix
苏渡苇4 天前
Spring Insight 里上报 Span 为什么用 JDK HttpClient 而不是 RestTemplate
java·后端·spring·spring cloud·springboot·性能监控
YOU OU5 天前
Spring Cloud Consul
spring cloud·consul·java-consul
重生之我是Java开发战士5 天前
【Spring Cloud】Eureka服务注册发现与LoadBalancer负载均衡
spring cloud·eureka·负载均衡