Excel工具-HUTOOL-读取Excel

简介: 基于Hutool和Apache POI,封装Excel读取工具,支持xls/xlsx格式。可读取为List、Map或Bean,提供Sax模式(Excel03SaxReader/Excel07SaxReader)高效处理大文件,避免内存溢出,适用于海量数据流式读取。

依赖


cn.hutool
hutool-all
5.3.10


org.apache.poi
poi-ooxml
4.1.2

ExcelReader
介绍
读取Excel内容的封装,通过构造ExcelReader对象,指定被读取的Excel文件、流或工作簿,然后调用readXXX方法读取内容为指定格式。
使用

  1. 读取Excel中所有行和列,都用列表表示
    ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");
    List> readAll = reader.read();Copy to clipboardErrorCopied
  1. 读取为Map列表,默认第一行为标题行,Map中的key为标题,value为标题对应的单元格值。
    即:第一行为key,之后的为value进行读取,此场景对第一行有要求,如使用示例1会有异常
    ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");
    List> readAll = reader.readAll();Copy to clipboardErrorCopied
  1. 读取为Bean列表,Bean中的字段名为标题,字段值为标题对应的单元格值。
    ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");
    List all = reader.readAll(Person.class);
    流方式读取Excel2003-Excel03SaxReader

在标准的ExcelReader中,如果数据量较大,读取Excel会非常缓慢,并有可能造成内存溢出。因此针对大数据量的Excel,Hutool封装了event模式的读取方式。Excel03SaxReader只支持Excel2003格式的Sax读取。
使用

reader方法的第二个参数是sheet的序号,-1表示读取所有sheet,0表示第一个sheet,依此类推。
定义行处理器
首先我们实现一下RowHandler接口,这个接口是Sax读取的核心,通过实现handle方法编写我们要对每行数据的操作方式(比如按照行入库,入List或者写出到文件等),在此我们只是在控制台打印。
private RowHandler createRowHandler() {
return new RowHandler() {
@Override
public void handle(int sheetIndex, long rowIndex, List rowlist) {
// 这里也可以处理成List或入库
Console.log("[{}] [{}] {}", sheetIndex, rowIndex, rowlist);
}
};
}Copy to clipboardErrorCopied
ExcelUtil快速读取
ExcelUtil.read03BySax("aaa.xls", 1, createRowHandler());Copy to clipboardErrorCopied
构建对象读取
Excel03SaxReader reader = new Excel03SaxReader(createRowHandler());
reader.read("aaa.xls", 0);Copy to clipboardErrorCopied

流方式读取Excel2007-Excel07SaxReader
介绍
在标准的ExcelReader中,如果数据量较大,读取Excel会非常缓慢,并有可能造成内存溢出。因此针对大数据量的Excel,Hutool封装了Sax模式的读取方式。Excel07SaxReader只支持Excel2007格式的Sax读取。
使用
reader方法的第二个参数是sheet的序号,-1表示读取所有sheet,0表示第一个sheet,依此类推。
定义行处理器
首先我们实现一下RowHandler接口,这个接口是Sax读取的核心,通过实现handle方法编写我们要对每行数据的操作方式(比如按照行入库,入List或者写出到文件等),在此我们只是在控制台打印。
private RowHandler createRowHandler() {
return new RowHandler() {
@Override
public void handle(int sheetIndex, long rowIndex, List rowlist) {
Console.log("[{}] [{}] {}", sheetIndex, rowIndex, rowlist);
}
};
}Copy to clipboardErrorCopied
ExcelUtil快速读取
ExcelUtil.read07BySax("aaa.xlsx", 0, createRowHandler());Copy to clipboardErrorCopied
构建对象读取
Excel07SaxReader reader = new Excel07SaxReader(createRowHandler());
reader.read("d:/text.xlsx", 0);Copy to clipboardErrorCopied

相关文章
|
4月前
|
Java 大数据 Apache
Excel工具-HUTOOL-输出Excel
Hutool基于Apache POI封装了Excel读写功能,提供ExcelWriter和BigExcelWriter类,支持写出List、Map、Bean等数据类型到Excel,可自定义样式、多sheet操作,并解决大数据量导出时的内存溢出问题,适用于文件导出、客户端下载等场景。
|
存储 算法 安全
国密算法及简单使用
国密算法,即国家密码局认定的国产密码算法,主要用于保护国家关键信息基础设施和商业领域的加密通信和数据安全。根据 2019年10月26日第十三届全国人民代表大会常务委员会第十四次会议通过的《中华人民共和国密码法》,国家对密码实行分类管理,密码分为核心密码、普通密码和商用密码
2385 4
|
4月前
Excel工具-HUTOOL-读取Excel
Hutool提供ExcelReader封装,支持读取Excel为List、Map或Bean。针对大数据量,提供Excel03SaxReader和Excel07SaxReader,基于SAX模式高效流式读取,避免内存溢出,支持按行处理数据,适用于xls和xlsx格式。
124 0
|
Java Maven
IDEA离线使用本地maven仓库
IDEA离线使用本地maven仓库
4056 1
IDEA离线使用本地maven仓库
|
3月前
|
SQL 存储 关系型数据库
别再嫌弃MySQL了!AI时代,当DuckDB拥抱MySQL
阿里云RDS MySQL DuckDB引擎推出两种形态:只读实例(HTAP读扩展)与分析主实例(支持写入/多源汇聚)。通过内核级集成,兼顾MySQL兼容性与DuckDB列式分析性能,在Binlog同步、高可用、数据安全、入库性能及SQL兼容性等方面全面增强,助力用户构建低成本、高性能的实时分析平台。(239字)
|
4月前
|
Apache
Excel工具-HUTOOL-读取Excel
基于Hutool和Apache POI,封装Excel读取工具,支持读取为List、Map或Bean;提供SAX模式高效解析大文件,避免内存溢出,适用于Excel 2003/2007格式,支持按行处理数据。
192 0
|
JSON 前端开发 Java
深入理解 Spring Boot 中日期时间格式化:@DateTimeFormat 与 @JsonFormat 完整实践
在 Spring Boot 开发中,日期时间格式化是前后端交互的常见痛点。本文详细解析了 **@DateTimeFormat** 和 **@JsonFormat** 两个注解的用法,分别用于将前端传入的字符串解析为 Java 时间对象,以及将时间对象序列化为指定格式返回给前端。通过完整示例代码,展示了从数据接收、业务处理到结果返回的全流程,并总结了解决时区问题和全局配置的最佳实践,助你高效处理日期时间需求。
1941 0
|
8月前
|
SQL Java 关系型数据库
mybatis批量插入对比
本文介绍了几种在 Spring Boot 项目中使用 MyBatis-Plus 进行批量插入操作的性能对比方法,包括手写循环插入、MyBatis-Plus 的 `saveBatch` 方法、自定义批量插入 SQL 以及开启 MySQL 的 `rewriteBatchedStatements=true` 参数的方式进行saveBatch对比。
1450 1
mybatis批量插入对比
|
9月前
|
人工智能 缓存 负载均衡
spring boot-MultipartFile 机制
本文详解了 Spring Boot 中 MultipartFile 的工作机制及大文件上传的解决方案。内容涵盖 MultipartFile 的解析流程、上传配置、Feign 上传大文件的内存问题及基于 RestTemplate 的流式上传实现。同时介绍了服务器端如何直接处理 application/octet-stream 类型的文件流,避免内存溢出问题。适合需要优化文件上传性能的开发者参考。
1129 0
|
安全 Java 数据库连接
Java使用MyBatis-Plus的OR
通过MyBatis-Plus的条件构造器,Java开发者可以方便地进行复杂的查询条件组合,包括AND和OR条件的灵活使用。熟练掌握这些技巧,可以显著提升开发效率和代码可读性。
790 20

热门文章

最新文章

下一篇
开通oss服务