依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
ExcelReader
介绍
读取Excel内容的封装,通过构造ExcelReader对象,指定被读取的Excel文件、流或工作簿,然后调用readXXX方法读取内容为指定格式。
使用
- 读取Excel中所有行和列,都用列表表示
ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");
List<List<Object>> readAll = reader.read();Copy to clipboardErrorCopied
- 读取为Map列表,默认第一行为标题行,Map中的key为标题,value为标题对应的单元格值。
即:第一行为key,之后的为value进行读取,此场景对第一行有要求,如使用示例1会有异常
ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");
List<Map<String,Object>> readAll = reader.readAll();Copy to clipboardErrorCopied
- 读取为Bean列表,Bean中的字段名为标题,字段值为标题对应的单元格值。
ExcelReader reader = ExcelUtil.getReader("d:/aaa.xlsx");
List<Person> 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<Object> 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<Object> 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