EasyExcel => EasyExcel-Plus => FastExcel

EasyExcel => EasyExcel-Plus => FastExcel

目录

什么是 FastExcel

主要特性

适用场景

结论

导航

快速开始

EasyExcel 与 FastExcel 的区别

EasyExcel 如何升级到 FastExcel

1. 修改依赖

2. 修改代码

3. 不修改代码直接依赖 FastExcel

4. 建议以后使用 FastExcel 类

简单示例:读取 Excel 文件

简单示例:创建 Excel 文件

https://github.com/CodePhiliaX/fastexcel

https://github.com/CodePhiliaX/fastexcel-doc

https://mvnrepository.com/artifact/cn.idev.excel/fastexcel

@psxjoy :还在为第一版的正式发布而努力。文档方面,我们已经完成了第一版的内容。会随着第一个正式版本同时发布。

什么是 FastExcel

FastExcel 是由原 EasyExcel 作者创建的最新作品。在 2023 年作者从阿里离职后,随着阿里宣布停止更新 EasyExcel,作者决定继续维护和升级这个项目。在重新开始时,作者选择为它起名为 FastExcel,以突出这个框架在处理 Excel 文件时的高性能表现,而不仅仅是简单易用。

FastExcel 将始终坚持免费开源,并采用最开放的 MIT 协议,使其适用于任何商业化场景。这为开发者和企业提供了极大的自由度和灵活性。FastExcel 的一些显著特点包括:

1、完全兼容原 EasyExcel 的所有功能和特性,这使得用户可以无缝过渡。

2、从 EasyExcel 迁移到 FastExcel 只需简单地更换包名和 Maven 依赖即可完成升级。

3、在功能上,比 EasyExcel 提供更多创新和改进。

4、FastExcel 1.0.0 版本新增了读取 Excel 指定行数和将 Excel 转换为 PDF 的功能。

我们计划在未来推出更多新特性,以不断提升用户体验和工具实用性。欢迎大家关注 程序员小懒的公众号 关注FastExcel的发展。FastExcel 致力于成为您处理 Excel 文件的最佳选择。

主要特性

高性能读写:FastExcel 专注于性能优化,能够高效处理大规模的 Excel 数据。相比一些传统的 Excel 处理库,它能显著降低内存占用。

简单易用:该库提供了简洁直观的 API,使得开发者可以轻松集成到项目中,无论是简单的 Excel 操作还是复杂的数据处理都能快速上手。

流式操作:FastExcel 支持流式读取,将一次性加载大量数据的问题降到最低。这种设计方式在处理数十万甚至上百万行的数据时尤为重要。

适用场景

FastExcel 非常适用于需要进行大规模数据导入导出操作的企业级应用场景。典型的使用场景包括:

数据报表生成:快速生成复杂的业务报表,支持多表格和动态数据填充。

批量数据导入:有效地将 Excel 数据批量导入至数据库系统,适用于人事管理、销售数据统计等领域。

ERP 系统集成:在 ERP 系统中实现自动化的 Excel 数据交换,以简化工作流程。

在线教育平台:用于导入学生成绩单、课程计划等大规模数据。

财务分析:处理财务报表和账单明细,以便进行细致的财务分析。

物联网数据处理:解析和处理 IoT 设备上传的批量数据文件,为后续数据分析和处理提供支持。

 借助 FastExcel,开发者能够快速、高效地实现 Excel 数据的读写操作,极大地提升工作效率,减少开发成本。

结论

FastExcel 是一个轻量级但功能强大的 Java 库,专为需要高性能和低内存占用的 Excel 文件处理而设计。如果您的项目需要处理大规模的 Excel 数据,FastExcel 无疑是一个值得考虑的选择。其流式处理和灵活的 API 使其成为处理 Excel 文件的理想工具。无论是开发新应用还是优化现有系统,FastExcel 都能够帮助开发者更轻松地应对 Excel 数据处理的挑战。

导航

快速开始

进阶主题

最佳实践

常见问题

贡献指南

反馈BUG

快速开始

FastExcel 基础库对 Java 语言版本最低要求的情况:

版本 jdk版本支持范围 备注

1.0.0+ jdk8 - jdk21 目前的master分支,完全兼容easyexcel

强烈建议您使用最新版本的 FastExcel,因为最新版本中的性能优化、BUG修复和新功能都会让您的使用更加方便。

当前 FastExcel 底层使用 poi 作为基础包,如果您的项目中已经有 poi 相关组件,需要您手动排除 poi 的相关 jar 包。

请在 pom.xml 文件中引入以下配置:目前仓库中是0.0.1版本,近期会发布

<dependency>

    <groupId>cn.idev.excel</groupId>

    <artifactId>fastexcel</artifactId>

    <version>1.0.0</version>

</dependency>

EasyExcel 与 FastExcel 的区别

_ 1. FastExcel 支持所有 EasyExcel 的功能,但是 FastExcel 的性能更好,更稳定。

 _ 2. FastExcel 与 EasyExcel 的 API 完全一致,可以无缝切换。

 _ 3. FastExcel 会持续的更新,修复 bug,优化性能,增加新功能。

EasyExcel 如何升级到 FastExcel

1. 修改依赖

将 EasyExcel 的依赖替换为 FastExcel 的依赖,如下:

<!-- easyexcel 依赖 -->

<dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>easyexcel</artifactId>

    <version>xxxx</version>

</dependency>

的依赖替换为

<dependency>

    <groupId>cn.idev.excel</groupId>

    <artifactId>fastexcel</artifactId>

    <version>1.0.0</version>

</dependency>

2. 修改代码

将 EasyExcel 的包名替换为 FastExcel 的包名,如下:

// 将 easyexcel 的包名替换为 FastExcel 的包名

import com.alibaba.excel.**;

替换为

import cn.idev.excel.**;

3. 不修改代码直接依赖 FastExcel

如果由于种种原因您不想修改代码,可以直接依赖 FastExcel ,然后在 pom.xml 文件中直接依赖 FastExcel。

 EasyExcel 与 FastExcel 可以共存,但是长期建议替换为 FastExcel。

4. 建议以后使用 FastExcel 类

为了兼容性考虑保留了 EasyExcel 类,但是建议以后使用 FastExcel 类,FastExcel 类是 类,FastExcel 的入口类,功能包含了 EasyExcel 类的所有功能,以后新特性仅在 FastExcel 类中添加。

简单示例:读取 Excel 文件

下面是读取 Excel 文档的例子:

// 实现 ReadListener 接口,设置读取数据的操作

public class DemoDataListener implements ReadListener<DemoData> {

    @Override

    public void invoke(DemoData data, AnalysisContext context) {

        System.out.println("解析到一条数据" + JSON.toJSONString(data));

    }

    @Override

    public void doAfterAllAnalysed(AnalysisContext context) {

        System.out.println("所有数据解析完成!");

    }

}

public static void main(String[] args) {

    String fileName = "demo.xlsx";

    // 读取 Excel 文件

    FastExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();

}

简单示例:创建 Excel 文件

下面是一个创建 Excel 文档的简单例子:

// 示例数据类

public class DemoData {

    @ExcelProperty("字符串标题")

    private String string;

    @ExcelProperty("日期标题")

    private Date date;

    @ExcelProperty("数字标题")

    private Double doubleData;

    @ExcelIgnore

    private String ignore;

}

// 填充要写入的数据

private static List<DemoData> data() {

    List<DemoData> list = new ArrayList<>();

    for (int i = 0; i < 10; i++) {

        DemoData data = new DemoData();

        da

ta.setString("字符串" + i);

        data.setDate(new Date());

        data.setDoubleData(0.56);

        list.add(data);

    }

    return list;

### 若依框架中实现分组导出数据的功能 在若依框架中实现分组导出数据功能,可以通过结合前端表格展示逻辑与后端数据处理能力来完成。以下是具体的技术细节: #### 后端实现部分 1. **定义实体类并标注 `@Excel` 注解** 使用 MyBatis-Plus 或其他 ORM 工具映射数据库表至 Java 实体类,并利用 FastExcelEasyExcel 插件进行 Excel 导出配置。对于需要分组的字段,在实体类中标注 `@Excel` 注解。 ```java @Data public class ProductEntity { private Long id; @Excel(name = "产品名称", width = 30) private String productName; @Excel(name = "销售数量", cellType = CellType.NUMERIC, converterExp = "0=无;1=有") private Integer salesVolume; @Excel(name = "所属分类", width = 20) private String category; } ``` 2. **查询并分组数据** 利用 SQL 查询语句或 MyBatis 的 XML 映射文件对数据按指定字段(如类别)进行分组。假设我们需要按照 `category` 字段分组,则可以在 Mapper 接口中编写如下方法: ```java List<ProductEntity> selectGroupByCategory(); ``` 并在对应的 XML 文件中实现分组查询逻辑: ```xml <select id="selectGroupByCategory" resultType="com.example.entity.ProductEntity"> SELECT *, COUNT(*) AS count FROM product GROUP BY category ORDER BY category ASC </select> ``` 3. **封装分组后的数据结构** 创建一个新的 VO 类型用于存储分组后的结果集。例如: ```java @Getter @Setter public class GroupedProductVO { private String groupKey; // 分组键名 private List<ProductEntity> productList; // 当前分组下的记录列表 } ``` 4. **调用第三方库生成 Excel 表格** 借助 Apache POI、FastExcelEasyExcel 库将上述分组后的数据写入到多个工作簿或者单独的工作表中。以下是一个基于 EasyExcel 的简单示例: ```java public void exportGroupedProducts(HttpServletResponse response) throws IOException { List<GroupedProductVO> groupedList = productService.getGroupedByCategory(); Workbook workbook = new XSSFWorkbook(); // 初始化 Excel 文档对象 int sheetIndex = 0; for (GroupedProductVO vo : groupedList) { Sheet sheet = workbook.createSheet("分类:" + vo.getGroupKey()); // 设置标题栏样式 Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("ID"); headerRow.createCell(1).setCellValue("产品名称"); headerRow.createCell(2).setCellValue("销售数量"); // 写入实际数据行 AtomicInteger rowIndex = new AtomicInteger(1); // 跳过首行列号从第二行开始计数 vo.getProductList().forEach(item -> { Row dataRow = sheet.createRow(rowIndex.getAndIncrement()); dataRow.createCell(0).setCellValue(item.getId() != null ? item.getId().toString() : ""); dataRow.createCell(1).setCellValue(item.getProductName()); dataRow.createCell(2).setCellValue(item.getSalesVolume() != null ? item.getSalesVolume().intValue() : 0); }); } try (OutputStream outStream = response.getOutputStream()) { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"); response.setHeader("Content-Disposition", URLEncoder.encode("分组导出.xlsx", "UTF-8").replaceAll("\\+", "%20")); workbook.write(outStream); } finally { workbook.close(); } } ``` #### 前端交互设计 为了提升用户体验,建议在页面上提供筛选条件输入框以及按钮触发下载动作。当用户点击“导出”按钮时,发送请求给服务器接口地址 `/export/grouped-products` ,携带必要的参数(如果有的话),最终返回一个可供浏览器直接保存下来的二进制流文件。 --- ### 注意事项 - 如果存在大量数据需导出的情况,请考虑采用分页机制逐步加载数据后再拼接成完整的 Excel 文件。 - 可能会遇到中文乱码问题,确保设置正确的字符编码格式 UTF-8[^1]。 - 对于复杂业务场景下可能还需要额外处理嵌套关系或其他特殊需求的数据项[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛马程序员2025

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值