开发者

Java使用FastExcel高效读取和写入Excel

目录
  • 01 引言
  • 02 简介
  • 03 功能概要
    • 3.1 Maven
    • 3.2 模型类
    • 3.3 读取Excel文件
    • 3.4 写入Excel文件
  • 04 小结

    01 引言

    FastExcel大家可能不熟悉,但是EasyExcel应该都使用过吧?

    FastExcelEasyExcel版本的延续,自从阿里巴巴官方停止维护EasyExcelEasyExcel的作者继续维护起来,并持续改进优化,并更名为FastExcel

    02 简介

    FastExcel 是一个 Java 库,旨在高效地读取和写入 Excel 文件。它最初是 EasyExcel 的分叉版本,旨在提供增强的性能、持续维护和新功能,同时保持与原始 EasyExcel API 的兼容性。这使其成为在 Java 应用程序中处理 Excel 数据的强大的用户友好的工具。

    FastExcel 通过优化内存使用来优先考虑高性能,特别是在处理大型数据集时。它通过 SAX 解析机制实现这一点,以流式方式处理基于 XML 的 Excel 文件(XLSX),而无需一次性将整个文件加载到内存中。

    官网地址:https://readmex.com/fast-excel/fastexcel/page-151366ada-2ea3-4451-aa3d-98ac90ce4f6e

    github地址:https://github.com/fast-excel/fastexcel

    主要特性:

    • 高性能读写:FastExcel 专注于性能优化,能够高效处理大规模的 Excel 数据。相比一些传统的 Excel 处理库,它能显著降低内存占用。
    • 简单易用:该库js提供了简洁直观的 API,使得开发者可以轻松集成到项目中,无论是简单的 Excphpel 操作还是复杂的数据处理都能快速上手。
    • 流式操作:FastExcel 支持流式读取,将一次性加载大量数据的问题降到最低。这种设计方式在处理数十万甚至上百万行的数据时尤为重要。

    03 功能概要

    业务项目中,我们经常需要读写Excel,如Excel的导入,导出。

    3.1 Maven

    <dependency>
        <groupId>cn.idev.excel</groupId>
        <artifactId>fastexcel</artifactId>
        <version>1.2.0</version> <!-- Or the latest version -->
    </dependency>
    

    3.2 模型类

    用来接收Excel数据的实体

    @Data
    public class Book {
    
        private String bookName;
        private String author;
        private BigDecimal price;
        private Date saleDate;
    }
    

    3.3 读取Excel文件

    API

    Java使用FastExcel高效读取和写入Excel

    案例:

    @Test
    void test01() throws FileNotFoundException {
        File file = ResourceUtils.getFile("classpath:file/demo.xls");
        List<Book> bookList = new ArrayList<>();
        FastExcel.read(file, Book.class, new ReadListener<Book>() {
            @Override
            public void invwww.devze.comoke(Book book, AnalysisContext analysisContext) {
                System.out.println("解析数据:" + jsON.toJSONString(book));
                bookList.add(book);
            }
    
            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                System.out.println("解析完所有数据....");
            }
        }).sheet().doRead();
    
        System.out.println("bookList:" + JSON.toJSONString(bookList));
    }
    

    执行结果:

    Java使用FastExcel高效读取和写入Excel

    代码解析:

    read(File file, Class head, ReadListener readListener)

    • FastExcel拥有静态方法read()
    • file:需要读取的文件
    • head:需要将文件解析的对象,按照字段的顺序和excel的澍勋解析,也可以通过@ExcelProperty指定索引位置
    • readListener:读取每一条数据的监听器,处理数据也是这里处理的

    FastExcel.read(...).sheet().doRead()

    • sheet():默认第一个sheet,也可以传递参数指定
    • doRead():开始同步读取数据,也可以异步读取数据doReadSync()

    3.4 写入Excel文件

    写入文件之前,我们需要定义模板类的名称,需要使用到@ExcelProperty

    @Data
    public class Book {
    
        @ExcelProperty(value = "书名")
        private String bookName;
        @ExcelProperty(value = "作者")
        private String author;
        @ExcelProperty(value = "价格")
        @NumberFormat("#,###.00")
        private BigDecimal price;
        @ExcelProperty(value = "上架时间")
        @DateTimeFormat("yyyy-MM-dd")
        private Date saleDate;
    }
    

    API:

    Java使用FastExcel高效读取和写入Excel

    案例:

    @Test
    void test02() {
        List<Book> bookList = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            Book item = new Book();
            item.setBookName("Java" + i);
            item.setAuthor("张三" + i);
            item.setPrice(new BigDecimal("2002.35"));
            item.setSaleDate(new Date());
            bookList.add(item);
        }
        FastExcel.write("writeDemo.xls", Book.class).sheet().sheetName("test").doWrite(bookList);
    }
    

    执行结果:

    Java使用FastExcel高效读取和写入Excel

    代码解析:

    write(String pa编程客栈thName, Class head)

    • FastExcel拥有静态方法write()
    • pathName:文件要生成的位置
    • head:模板类,这个生成Excel的关键

    FastExcel.write(...).sheet().sheetName("test").doWrite(bookList)

    • sheet():写入sheet的位置,默认第一个
    • sheetName("test"):自定义sheet的名称
    • doWrite():要写入的数据源

    04 小结

    FastExcel替我们省去了使用POI的繁琐,使用起来只关系需要处理的数据即可,非常方便。EasyExcelFastExcel在使用上基本没有什么区别,因为同宗同源。

    EasyExcel已经停止维护了,你会去迁移到FastExcel上么?作javascript者给出了几个迁移优势:

    Java使用FastExcel高效读取和写入Excel

    以上就是Java使用FastExcel高效读取和写入Excel的详细内容,更多关于Java FastExcel读取和写入Excel的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜