跳到主要内容
版本:3.1.x-3.3.x

读Excel

注解

使用注解很简单,只要在对应的实体类上面加上注解即可。

ExcelProperty

用于匹配excel和实体类的匹配,参数如下:

名称默认值描述
value用于匹配excel中的头,必须全匹配,如果有多行头,会匹配最后一行头
orderInteger.MAX_VALUE优先级高于value,会根据order的顺序来匹配实体和excel中数据的顺序
index-1优先级高于valueorder,会根据index直接指定到excel中具体的哪一列
converter自动选择指定当前字段用什么转换器,默认会自动选择。读的情况下只要实现com.alibaba.excel.converters.Converter#convertToJavaData(com.alibaba.excel.converters.ReadConverterContext<?>) 方法即可

ExcelIgnore

默认所有字段都会和excel去匹配,加了这个注解会忽略该字段

ExcelIgnoreUnannotated

默认不加ExcelProperty 的注解的都会参与读写,加了不会参与读写

DateTimeFormat

日期转换,用String去接收excel日期格式的数据会调用这个注解,参数如下:

名称默认值描述
value参照java.text.SimpleDateFormat书写即可
use1904windowing自动选择excel中时间是存储1900年起的一个双精度浮点数,但是有时候默认开始日期是1904,所以设置这个值改成默认1904年开始

NumberFormat

数字转换,用String去接收excel数字格式的数据会调用这个注解。

名称默认值描述
value参照java.text.DecimalFormat书写即可
roundingModeRoundingMode.HALF_UP格式化的时候设置舍入模式

参数

概念介绍

  • ReadWorkbook 可以理解成一个excel
  • ReadSheet 理解成一个excel里面的一个表单

通用参数

ReadWorkbook,ReadSheet 都会有的参数,如果为空,默认使用上级。

名称默认值描述
converter默认加载了很多转换器,这里可以加入不支持的字段
readListener可以注册多个监听器,读取excel的时候会不断的回调监听器中的方法
headRowNumber1excel中头的行数,默认1行
headclazz二选一。读取文件头对应的列表,会根据列表匹配数据,建议使用class
clazzhead二选一。读取文件的头对应的class,也可以使用注解。如果两个都不指定,则会读取全部数据
autoTrimtrue会对头、读取数据等进行自动trim
use1904windowingfalseexcel中时间是存储1900年起的一个双精度浮点数,但是有时候默认开始日期是1904,所以设置这个值改成默认1904年开始
useScientificFormatfalse数字转文本的时候在较大的数值的是否是否采用科学计数法

ReadWorkbook

提示

设置方法如下,找不到参数的看下通用参数里面是否存在。

 EasyExcel.read(fileName, DemoData.class, new DemoDataListener())
// 在 read 方法之后, 在 sheet方法之前都是设置ReadWorkbook的参数
.sheet()
.doRead();
名称默认值描述
excelType当前excel的类型,支持XLS、XLSX、CSV
inputStreamfile二选一。读取文件的流,如果接收到的是流就只用,不用流建议使用file参数。因为使用了inputStream easyexcel会帮忙创建临时文件,最终还是file
fileinputStream二选一。读取文件的文件。
mandatoryUseInputStreamfalse强制使用 inputStream 来创建对象,性能会变差,但是不会创建临文件。
charsetCharset#defaultCharset只有csv文件有用,读取文件的时候使用的编码
autoCloseStreamtrue自动关闭读取的流。
readCache默认小于5M用 内存,超过5M会使用 EhCache,这里不建议使用这个参数。
readCacheSelectorSimpleReadCacheSelector用于选择什么时候用内存去存储临时数据,什么时候用磁盘存储临时数据
ignoreEmptyRowtrue忽略空的行
password读取文件的密码
xlsxSAXParserFactoryName指定sax读取使用的class的名称,例如:com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
useDefaultListenertrue@since 2.1.4
默认会加入ModelBuildEventListener 来帮忙转换成传入class的对象,设置成false后将不会协助转换对象,自定义的监听器会接收到Map<Integer,CellData>对象,如果还想继续接听到class对象,请调用readListener方法,加入自定义的beforeListenerModelBuildEventListener、 自定义的afterListener即可。
extraReadSet额外需要读取内容的set,默认不读取这些数据
readDefaultReturnSTRING@since 3.2.0
STRING:会返回一个Map<Integer,String>的数组,返回值就是你在excel里面不点击单元格看到的内容
ACTUAL_DATA:会返回一个Map<Integer,Object>的数组,返回实际上存储的数据,会帮自动转换类型,Object类型为BigDecimalBooleanStringLocalDateTime、null,中的一个,
READ_CELL_DATA: 会返回一个Map<Integer,ReadCellData<?>>的数组,其中?类型参照ACTUAL_DATA的

ReadSheet

提示

设置方法如下,找不到参数的看下通用参数里面是否存在。

 EasyExcel.read(fileName, DemoData.class, new DemoDataListener())
.sheet()
// 在 sheet 方法之后, 在 doRead方法之前都是设置ReadSheet的参数
.doRead();
名称默认值描述
sheetNo0需要读取Sheet的编码,建议使用这个来指定读取哪个Sheet
sheetName根据名字去匹配Sheet