Excel工具 - ExcelUtil
# Excel工具 - ExcelUtil
# 介绍
ExcelUtil
是 Hutool 提供的一个强大的 Excel 操作工具类,封装了常见的 Excel 读写操作,支持读取文件、流、指定 Sheet 页等多种操作方式,同时还支持处理大数据量的 Excel 文件。通过 ExcelUtil
,开发者可以方便地实现 Excel 文件的读取和写入。
# 使用方法
# 1. 从文件中读取 Excel 为 ExcelReader
ExcelUtil.getReader(File file)
方法用于从指定的 Excel 文件中读取数据,并返回一个 ExcelReader
对象。
- 方法签名:
public static ExcelReader getReader(File file)
参数:
file
:待读取的 Excel 文件对象。
返回值:返回一个
ExcelReader
对象,用于进一步读取 Excel 中的数据。使用场景:适用于直接读取本地文件系统中的 Excel 文件。
示例代码:
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.core.io.FileUtil;
public class ExcelUtilExample {
public static void main(String[] args) {
// 从指定文件路径中读取 Excel 文件
ExcelReader reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"));
// 读取所有行的数据
List<List<Object>> data = reader.read();
for (List<Object> row : data) {
System.out.println(row);
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
输出结果:
[姓名, 年龄, 性别]
[张三, 25, 男]
[李四, 22, 女]
2
3
# 2. 从流中读取 Excel 为 ExcelReader
ExcelUtil.getReader(InputStream inputStream)
方法支持从输入流中读取 Excel 文件,这在从资源文件或网络中读取 Excel 时非常有用。
- 方法签名:
public static ExcelReader getReader(InputStream inputStream)
参数:
inputStream
:待读取的 Excel 文件输入流。
返回值:返回一个
ExcelReader
对象,用于进一步读取 Excel 中的数据。使用场景:适用于从 ClassPath 或其他资源路径中读取 Excel 文件。
示例代码:
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import java.io.InputStream;
public class ExcelUtilExample {
public static void main(String[] args) {
// 从 ClassPath 中读取 Excel 文件
InputStream inputStream = ResourceUtil.getStream("example.xlsx");
ExcelReader reader = ExcelUtil.getReader(inputStream);
// 读取所有行的数据
List<List<Object>> data = reader.read();
for (List<Object> row : data) {
System.out.println(row);
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 3. 读取指定的 Sheet
可以通过 Sheet 的编号或名称来读取指定的 Sheet 页的数据。
- 方法签名:
public static ExcelReader getReader(File file, int sheetIndex)
public static ExcelReader getReader(File file, String sheetName)
2
参数:
file
:待读取的 Excel 文件对象。sheetIndex
:Sheet 页的索引,从 0 开始。sheetName
:Sheet 页的名称。
返回值:返回一个
ExcelReader
对象,用于进一步读取指定 Sheet 页的数据。使用场景:适用于含有多个 Sheet 页的 Excel 文件,需读取特定 Sheet 页时。
示例代码:
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.core.io.FileUtil;
public class ExcelUtilExample {
public static void main(String[] args) {
// 通过 Sheet 编号读取
ExcelReader reader = ExcelUtil.getReader(FileUtil.file("test.xlsx"), 0);
// 通过 Sheet 名称读取
ExcelReader readerByName = ExcelUtil.getReader(FileUtil.file("test.xlsx"), "Sheet1");
// 读取所有行的数据
List<List<Object>> data = reader.read();
for (List<Object> row : data) {
System.out.println(row);
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 4. 读取大数据量的 Excel
对于包含大量数据的 Excel 文件,可以使用 SAX 模式逐行读取数据,以节省内存并提高性能。
- 方法签名:
public static void readBySax(String path, int sheetIndex, RowHandler rowHandler)
参数:
path
:待读取的 Excel 文件路径。sheetIndex
:Sheet 页的索引,从 0 开始。rowHandler
:处理每一行数据的回调接口,实现RowHandler
接口。
返回值:无返回值,数据通过回调接口进行处理。
使用场景:适用于处理大量数据时,逐行读取并处理每一行数据,避免一次性加载全部数据造成内存溢出。
示例代码:
import cn.hutool.core.io.FileUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.sax.handler.RowHandler;
import java.util.List;
public class ExcelUtilExample {
public static void main(String[] args) {
// 定义 RowHandler 处理每一行的数据
RowHandler rowHandler = new RowHandler() {
@Override
public void handle(int sheetIndex, int rowIndex, List<Object> rowlist) {
System.out.println("Sheet: " + sheetIndex + " Row: " + rowIndex + " Data: " + rowlist);
}
};
// 使用 SAX 模式逐行读取大数据量的 Excel 文件
ExcelUtil.readBySax("d:/test/bigdata.xlsx", 0, rowHandler);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 总结
ExcelUtil
提供了简洁而强大的 Excel 操作能力,支持从文件、流读取 Excel,指定 Sheet 页读取,以及处理大数据量的 Excel 文件。无论是在日常开发中,还是在复杂数据处理场景下,ExcelUtil
都能帮助开发者轻松应对 Excel 的操作需求。