1. maven
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.2</version>
</dependency>
2. 注解
ExcelProperty 指定当前字段对应excel中的那一列。可以根据名字或者Index去匹配。不写,默认按顺序匹配
value 名头名称
index 字段与列数对应索引
converter 字段转化器
ExcelIgnore 默认所有字段都会和excel去匹配,加了这个注解会忽略该字段
DateTimeFormat 日期转换,用String去接收excel日期格式的数据会调用这个注解。
value SimpleDateFormat格式方式 y(年) M(月 )d(日) h(时) m(分) s(秒)
use1904windowing 是否使用1904windowing
NumberFormat 数字转换,用String去接收excel数字格式的数据会调用这个注解。
value DecimalFormat格式方式 ##.00
roundingMode 取舍方式
ExcelIgnoreUnannotated 默认不加ExcelProperty 的注解的都会参与读写,加了不会参与
ColumnWidth 设置宽
value 数值
ContentRowHeight 设置高
value 数值
HeadRowHeight 设置头高
value 数值
3. Excel读入
3.1 常用操作API
3.1.1 初始化方法
初始化获取Excel读取构造对象(ExcelReaderBuilder)
构造方法 | 描述 |
EasyExcel.read() | 无参初始化,各属性由方法添加 |
EasyExcel.read(File file) | 文件来源 File,可分别设置对象class和监听器 |
EasyExcel.read(File file, ReadListener listener) | |
EasyExcel.read(File file, Class head, listener listener) | |
EasyExcel.read(String path) | 文件来源 FilePath,可分别设置对象class和监听器 |
EasyExcel.read(String path, ReadListener listener) | |
EasyExcel.read(String path, Class head, ReadListener listener) | |
EasyExcel.read(InputStream in) | 文件来源 InputStream,可分别设置对象class和监听器 |
EasyExcel.read(InputStream in, ReadListener listener) | |
EasyExcel.read(InputStream in, Class head, ReadListener listener) |
3.1.2 操作方法
ExcelReaderBuilder对象操作方法,添加属性,获取Excel读取对象(ExcelReader),Sheet构造对象(ExcelReaderSheetBuilder)
功能 | 方法 | 描述 |
Excel属性设置 (ExcelReaderBuilder) | .head(T.class) | 添加 对象class |
.file(File file) | 添加 文件,可以是File对象,文件路径,输入流 | |
.registerReadListener(new MyListener()) | 注册 读取监听器 | |
.registerConverter(new MyConverter()) | 注册转化器 | |
.headRowNumber(1) | 设置头行数,默认为1 | |
.autoTrim(true) | 设置是否去两端空格,默认为 true | |
.ignoreEmptyRow(true) | 设置忽略空行,默认为 true | |
.use1904windowing(true) | ||
.mandatoryUseInputStream(true) | 强制使用输入流 | |
.excelType(ExcelTypeEnum.XLSX); | 设置类型,默认自动 | |
.autoCloseStream(true) | 自动关流 | |
.readCache(new MyReadCache()) | 设置自定义缓存 | |
.readCacheSelector(new MySelector()) | 设置缓存选择器 | |
.customObject(null) | ||
.password("") | ||
.xlsxSAXParserFactoryName("") | ||
ExcelReaderBuilder方法; 获取Excel属性设置 (ExcelReader) | .build() | 构建ExcelReader对象 |
.doReadAll() | 读取所有数据,可配置监听器读取 | |
ExcelReaderBuilder方法; 获取sheet构造对象(ExcelReaderSheetBuilder) | .sheet() | 获取sheet构造器, |
excelReader方法 | .readAll() | 读取所有数据,可配置监听器读取 |
.finish() | 关流 | |
.read(ReadSheet readSheet ) | 数据读取,参数是ReadSheet ,list,不定参 | |
ExcelReaderSheetBuilder方法; Sheet构造器属性添加 | .headRowNumber(1) | 设置头行数,默认为1 |
.head(T.class) | 设置实体类 | |
.sheetNo(1) | 设置 sheet 索引 | |
.sheetName("") | 设置 sheet 名称 | |
.registerReadListener(new MyListener()) | 注册监听器 | |
.registerConverter(new MyConverter()) | 注册转换器 | |
.use1904windowing(true) | ||
.autoTrim(true); | 自动去两边空格 | |
ExcelReaderSheetBuilder方法; (数据读取) | sheet.doRead(); | 异步读取,在监听器中进行数据处理 |
sheet.doReadSync(); | 同步读取,返回结果集 |
3.2 操作实例
//异步读取所有sheet数据,文件可为File,路径,输入流;不设置T.class时,监听器监听数据为List<map>结构,三个参数都可在方法中设置
EasyExcel.read(file,T.class,new MyListener()).doReadAll();
//异步读取所有sheet数据,可在sheet方法参数中指定sheet索引,sheet名称
EasyExcel.read(file,T.class,new MyListener()).sheet().doRead();
//同步读取所有sheet数据,返回list数据,可在sheet方法参数中指定sheet索引,sheet名称
List<Object> list = EasyExcel.read().sheet().doReadSync();
//读取数据的其他方式
ExcelReader excelReader = EasyExcel.read(fileName, T.class, new MyListener()).build();//构建Excel读取对象
ReadSheet build = EasyExcel.readSheet(0).build();//构建Sheet读取对象
excelReader.read(build);//读取数据
excelReader.finish();//关流
4. Excel读入
4.1 常用操作API
4.1.1 初始化方法
初始化获取Excel写出构造对象(ExcelWriterBuilder)
构造方法 | 描述 |
EasyExcel.write() | 无参初始化,各属性由方法添加 |
EasyExcel.write(File file) | 文件输出源File,文件路径,输出流,可设置class |
EasyExcel.write(File file,Class head) | |
EasyExcel.write(String pathName) | |
EasyExcel.write(String pathName,Class head) | |
EasyExcel.write(OutputStream outputStream) | |
EasyExcel.write(OutputStream outputStream,Class head) |
4.1.2 操作方法
ExcelWriterBuilder对象操作方法,添加属性,获取Excel读取对象(ExcelWriter),Sheet构造对象(ExcelWriterSheetBuilder)
各对象公共设置属性方法:
对象 | 方法 | 描述 |
Excel属性设置 (ExcelWriterBuilder) | .head(T.class) | 添加 对象class |
.registerConverter(new MyConverter()) | 注册转换器 | |
.useDefaultStyle(true) | 是否使用默认样式 | |
.automaticMergeHead(true) . | 是否自动合并表头 | |
.excelType(ExcelTypeEnum.XLSX) | 设置文件类型 | |
.relativeHeadRowIndex(1) | 头行索引 | |
.includeColumnFiledNames(null) | 导出列包含字段名集合 | |
.includeColumnIndexes(null) | 导出列包含索引集合 | |
.excludeColumnFiledNames(null) | 导出列排除字段名集合 | |
.excludeColumnIndexes(null) | 导出列排除索引集合 | |
.registerWriteHandler(new MyWriteHandler()); | 注入写出处理器 | |
.needHead(true) | 是否需要表头 | |
各对象私有方法:
功能 | 方法 | 描述 |
Excel属性设置 (ExcelWriterBuilder) | ||
.file(File file) | 添加 文件,可以是File对象,文件路径,输入流 | |
.autoCloseStream(true) | 是否自动关流 | |
.password("") | 设置密码 | |
.inMemory(true) | 记忆 | |
.writeExcelOnException(true) | 异常时写出 | |
.withTemplate("") | 加载模板 | |
ExcelWriterBuilder方法; 获取Excel属性设置(ExcelWriter) | write.build(); | |
ExcelWriterBuilder方法; 获取Sheet构造器(ExcelWriterSheetBuilder) | write.sheet(); | |
ExcelWriter方法 | .write(List data, WriteSheet writeSheet) | 可添加WriteTable参数 |
.fill(Object data, WriteSheet writeSheet) | 可添加FillConfig参数 | |
.finish(); | 关流 | |
.writeContext(); | ||
ExcelWriterSheetBuilder方法 属性添加 | .sheetName() | |
.sheetNo() | ||
ExcelWriterSheetBuilder方法 操作方法 | .doFill(Object o); | 数据填充,可添加FillConfig参数 |
.doWrite(List data) | 数据写出,可添加WriteTable参数 | |
ExcelWriterSheetBuilder方法 | .sheet.build() | 构建Excel写出对象(WriteSheet) |
ExcelWriterSheetBuilder方法 | .sheet.table(); | 获取表格构建对象(ExcelWriterTableBuilder) 可填参数 表格索引 |
ExcelWriterTableBuilder方法 | .build(); | 构建Excel表格对象(WriteTable) |
.doWrite(); | 数据写出 | |
WriteSheet方法 | .getColumnWidthMap(); | 获取列映射,set方法设置 |
.getSheetName(); | 获取Sheet名,set方法设置 | |
.getSheetNo(); | 获取Sheet号,set方法设置 | |
.getTableStyle(); | 获取表样式,set方法设置 | |
WriteTable方法 | .getTableNo(); | 获取表格号,set方法设置 |
.getTableStyle(); | 设置表格样式,set方法设置 | |
4.3 操作实例
//操作方式1 数据导出,可导出到File,文件路径,输出流
EasyExcel.write(fileName, T.class).sheet("sheetName").doWrite(List<T> list);
//操作方式2
ExcelWriter excelWriter = EasyExcel.write(fileName, T.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
excelWriter.write(List list, writeSheet);
excelWriter.finish();
//操作方式3 导出指定列数据
EasyExcel.write(fileName, T.class).includeColumnFiledNames(Set<String> columnFiledNames).sheet("sheetName")
.doWrite(List<T> list);
注:更多实例点击查看 easyExcel官网