Excel工具-HUTOOL-读取Excel

简介: 基于Hutool和Apache POI,封装Excel读取工具,支持读取为List、Map或Bean;提供SAX模式高效解析大文件,避免内存溢出,适用于Excel 2003/2007格式,支持按行处理数据。

依赖


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

目录
相关文章
|
Ubuntu Java Linux
在Spring Boot中使用iTextPDF创建动态PDF文档
iTextPDF 是一个用于创建和操作 PDF(Portable Document Format)文档的流行的 Java 库。它提供了一套全面的功能,用于处理 PDF 文件,包括创建新文档、修改现有文档以及提取信息。
1280 1
|
7月前
|
Apache
Excel工具-HUTOOL-读取Excel
基于Hutool和Apache POI,封装Excel读取工具,支持xls/xlsx格式。可读取为List、Map或Bean,提供Sax模式(Excel03SaxReader/Excel07SaxReader)高效处理大文件,避免内存溢出,适用于海量数据流式读取。
|
8月前
|
安全 测试技术 Linux
Acunetix v25.11 发布,新增功能简介
Acunetix v25.11 发布,新增功能简介
429 11
Acunetix v25.11 发布,新增功能简介
|
存储 缓存 监控
深度剖析阿里巴巴平台商品详情接口:技术、应用与代码实战
阿里巴巴商品详情接口基于RESTful架构,使用HTTP协议通信,支持GET和POST请求方式。开发者需通过App Key和App Secret进行签名认证,确保接口安全调用。核心端点如`https://api.1688.com/router/rest?method=alibaba.item.get`可用于获取商品基本信息,常见参数包括`fields`(指定返回字段)和`num_iid`(商品ID)。接口响应为JSON格式,包含商品标题、价格、库存、描述、图片链接、供应商信息等。开发者可结合实际需求进行数据提取与处理。
|
10月前
|
机器学习/深度学习 算法 安全
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
318 3
|
Go API 开发工具
Opentelemetry SDK的简单用法
Opentelemetry SDK的简单用法
411 3
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
605 0
|
消息中间件 关系型数据库 MySQL
SpringBoot-Kafka(生产者事务、手动提交offset、定时消费、消息转发、过滤消息内容、自定义分区器、提高吞吐量)
SpringBoot-Kafka(生产者事务、手动提交offset、定时消费、消息转发、过滤消息内容、自定义分区器、提高吞吐量)
SpringBoot-Kafka(生产者事务、手动提交offset、定时消费、消息转发、过滤消息内容、自定义分区器、提高吞吐量)
|
缓存 JavaScript 前端开发
vue2进阶篇:vue-router之嵌套(多级)路由
vue2进阶篇:vue-router之嵌套(多级)路由
649 3
|
算法 Java Linux
java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
这篇文章介绍了如何在Java中使用Graphics2D在图片上绘制文字,并实现自动换行的功能。
1059 0