Easy Excel的读写常用方法

1 Easy Excel的读写常用方法

添加引入依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.2.1</version><!-- 根据情况更新版本 -->
</dependency>

1.1 读excel

1.1.1 主要入参

文件路径(String) / 文件对象(File) / 文件流对象(InputStream),监听器(Listener),文件类型(枚举ExcelTypeEnum,easyexcel自带枚举类)。

1.1.2 主要使用方法

EasyExcelFactory.read(InputStream,Listener)
.excelType(ExcelTypeEnum)
.sheet()
.doRead();

可将EasyExcelFactory替换为EasyExcel,EasyExcel继承了EasyExcelFactory,可以调用EasyExcelFactory类中的所有静态方法;
可将read()的InputStream类型参数替换为:文件路径(String) / 文件对象(File)。

1.1.3 主要出参

void或文件数据内容(一般为List集合类型)。

1.1.4 以文件流对象为例

从流对象获取文件内容,通过自定义监听器进行处理并返回文件数据;默认读取第一个sheet,可在sheet()传索引值参数(索引从0开始)。

1.1.4.1 主要使用方法
(1)默认操作

默认读取第一个sheet(sheet方法不传入参数);
默认表头为第一行;

EasyExcelFactory.read(fileInputStream,listener)
.excelType(ExcelTypeEnum.XLSX)
.sheet()
.doRead();
(2)自定义操作

自定义读取sheet页(sheet方法传入int类型参数);
自定义表头行数(headRowNumber方法传入int类型参数);
自定义表头实体Class对象(head方法传入表土实体Class对象);
若不调用headRowNumber(),默认根据head(Class)传入的参数解析;

EasyExcelFactory.read(fileInputStream,listener)
.excelType(ExcelTypeEnum.XLSX)
.sheet(0)
.head(DemoData.class)
.headRowNumber(1)
.doRead();
1.1.4.2其他操作
(1)自定义监听器

需继承AnalysisEventListener类或实现ReadListener接口(二者都是easyexcel自带的监听器),重写其中的方法。
主要方法:
(1.1)void invoke(T var1, AnalysisContext var2);
读取每一行的数据时调用该invoke方法,其中var1为读取一行表格数据;AnalysisContext对象为excel导入的上下文环境对象,用于存储和传递与解析事件相关的信息;
(1.2)default void extra(CellExtra extra, AnalysisContext context) {}
读取额外信息时调用extra方法,其中extra参数为读取到的一条额外信息;
(1.3)void doAfterAllAnalysed(AnalysisContext var1);
所有数据解析完毕(表格数据和额外数据)后调用doAfterAllAnalysed方法;
(1.4)default void onException(Exception exception, AnalysisContext context) throws Exception { throw exception;}
在遇到异常时会调用该方法,抛出异常则停止读取,不抛出异常继续读取下一行。

(2)读取额外信息,如:合并单元格,批注、超链接

在自定义监听器的extra(CellExtra, AnalysisContext)中获取额外信息(一般在解析完所有数据之后执行);
eatra方法的CellExtra对象为读取到的额外信息,CellExtra对象的type属性为额外信息类型,调用easyexcel自带的枚举类CellExtraTypeEnum判断额外信息类型【COMMENT(批注),HYPERLINK(超链接),MERGE(合并单元格)】。

1.2 写excel

1.2.1 主要入参

数据集合(Collection),数据写入位置:文件路径(String) / 文件对象(File) / 文件流对象(OutputStream)、文件类型(枚举ExcelTypeEnum,easyexcel自带枚举类)。

1.2.2 主要使用方法

EasyExcelFactory.write(OutputStream)
.excelType(ExcelTypeEnum)
.sheet()
.doWriter(Collection);

可将EasyExcelFactory替换为EasyExcel,EasyExcel继承了EasyExcelFactory,可以调用EasyExcelFactory类中的所有静态方法;
可将write()的OutputStream类型参数替换为:文件路径(String) / 文件对象(File) 。

1.2.3 主要出参

void 或者自定义(一般为文件操作对象,如OutputStream类型)。

1.2.4以文件流对象为例

将传入的数据集合写入指定位置,默认写入第一个sheet,可在sheet()传索引值参数(索引从0开始)。

1.2.4.1主要使用方法
(1)默认写入第一个sheet(sheet方法不传入参数)
EasyExcelFactory.write(fileOutputStream)
.needHead(false)
.excelType(ExcelTypeEnum.XLSX)
.sheet()
.doWrite(Collection);
(2)自定义操作

自定义写入sheet页(sheet方法传入int类型参数);
自定义是否需要表头(needHead方法传入boolean类型参数);
自定义表头实体Class对象(head方法传入表头实体Class对象);

EasyExcelFactory.write(fileOutputStream)
.needHead(false)
.excelType(ExcelTypeEnum.XLSX)
.sheet(0)
.doWrite(Collection);
EasyExcelFactory.write(fileOutputStream)
.needHead(true)
.head(DemoData.class)
.excelType(ExcelTypeEnum.XLSX)
.sheet(0)
.doWrite(Collection);
1.2.4.2其他操作
(1)单元格合并操作

使用方法:registerWriteHandler(Handler),传入合并策略类对象

EasyExcelFactory.write(fileOutputStream)
.needHead(true)
.head(DemoData.class)
.excelType(ExcelTypeEnum.XLSX)
.sheet(0)
.registerWriteHandler(Handler)
.doWrite(Collection);
(2)使用方式

通过继承easyexcel提供的处理写入数据的主要接口:RowWriteHandler(行写入处理)、CellWriteHandler(单元格写入处理),实现其中的方法来动态进行数据的合并操作。
(2.1)RowWriteHandler(行写入处理)
自定义类继承RowWriteHandler接口
主要实现方法:

default void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {}

在每一行写入完成之后回调,可以在该方法里获取该行的数据进行额外操作。
参数:
WriteSheetHolder writeSheetHolder
写入表格持有者,包含了当前正在写入的表格(sheet)的信息;通常在写入多个表格时,会创建多个 WriteSheetHolder 对象来管理不同表格的信息;
WriteTableHolder writeTableHolder
写入表格持有者,包含了当前正在写入的表格(table)的信息;在 EasyExcel 中,表格(table)是指一系列行数据,通常是由一个 Java 对象的列表组成的数据表格;一个表格可以包含多行数据,但只有一个表头;因此,WriteTableHolder 主要用于管理当前写入的表格的表头信息和其他属性;
Row row
当前行对象
Integer relativeRowIndex
相对行索引,表示当前处理的单元格所在行相对于表头的索引偏移量
Boolean isHead
当前行是否表头;如果为 true,则表示当前行是表头行;如果为 false,则表示当前行是数据行。

其他方法:

default void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer rowIndex, Integer relativeRowIndex, Boolean isHead) {}

在行被创建之前调用;

default void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {}

在行被创建之后调用。

(2.2)CellWriteHandler(单元格写入处理)
自定义类继承CellWriteHandler接口
主要实现方法:

default void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {}

每一个单元格写入之后回调,可以在该方法里获取单元格的数据进行额外操作。
参数:WriteSheetHolder writeSheetHolder
写入表格持有者,包含了当前正在写入的表格(sheet)的信息;通常在写入多个表格时,会创建多个 WriteSheetHolder 对象来管理不同表格的信息;
WriteTableHolder writeTableHolder
写入表格持有者,包含了当前正在写入的表格(table)的信息;在 EasyExcel 中,表格(table)是指一系列行数据,通常是由一个 Java 对象的列表组成的数据表格;一个表格可以包含多行数据,但只有一个表头;因此,WriteTableHolder 主要用于管理当前写入的表格的表头信息和其他属性;
List<WriteCellData<?>> cellDataList
一个包含当前单元格数据的列表;EasyExcel 写入 Excel 时,会根据传入的数据列表自动生成对应的单元格数据列表,其中包含了每个单元格的数据和样式信息;
Cell cell
当前单元格对象
Head head
表头对象,表示当前单元格所属的表头信息;
Integer relativeRowIndex
相对行索引,表示当前处理的单元格所在行相对于表头的索引偏移量
Boolean isHead
当前行是否表头;如果为 true,则表示当前行是表头行;如果为 false,则表示当前行是数据行。

其他方法:

default void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {}

在单元格被创建之前调用;

default void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {}

在单元格创建完成后调用;

default void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, WriteCellData<?> cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {}

在单元格数据转换完成后调用;例如根据单元格的数据和样式信息做一些后处理,或者在转换完成后打印日志等。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值