1.之前项目需求导出简单的excel表格,网上找到了一个叫xxl-excel的工具。
xxl-excel底层用了poi和反射实现的。
xxl-excel能满足一些简单的excel导入导出,不支持复杂的excel导入导出。如果要操作复杂的表格,还是直接操作poi吧。
地址:http://www.xuxueli.com/xxl-excel/#/
2.使用准备
2.1.依赖包引入:
i.可以自己打jar包;
下载下来源码,在项目目录下面运行mvn package命令;在./target目录下会生成
‘xxl-excel-1.1.0-SNAPSHOT.jar’包,加入到要使用的工程中
ii.使用maven公共仓库引入依赖
2.2.依赖的依赖POI
本工具包依赖于POI_3.17,要使用的话需要在自己的工程中添加POI_3.17的依赖;使用maven管理如下:
3.导出Test
3.1.对应excel的简单对象
(省略setter和getter方法)
注解解释:
i.@ExcelSheet : 工作簿的名称,用于类上
属性:
name : 可以从指定名称的工作簿中导入数据;或者指定导出的工作簿名称
headColor : 首行(标题行)的颜色
ii.@ExcelField :字段对应Excel表的列名,用于属性上
属性:
name : 指定对应关系
dateformat :指定时间的格式,默认是“yyyy-MM-dd HH:mm:ss”
width :设置单元格宽度
3.2.对象列表导出到Excel
!.方法介绍:
void exportToFile(String filePath, List... dataList){...}
第二个参数是可以变的参数,意思是可以同时传入多个对象的列表,在一个Excel表中 生成多个sheet来导出不同的数据。
3.3.导出结果
4.导入Test
4.1.和导出一样先定义对应excel的简单对象
(省略setter和getter方法)
4.2.导入的几种方式(方法)
4.2.1.文件路径
控制台打印:
4.2.2.传入文件,转换成输入流
测试工具打印:
4.3.导入方法介绍
i.List importExcel(Class sheetClass, File excelFile){...}
入参是pojo类和文件;
ii.List importExcel(Class sheetClass, String filePath){...}
入参是pojo类和文件路径
iii.List importExcel(Class sheetClass, InputStream inputStream){...}
入参是破击类和输入流
ps:根据使用场景选择不同的导入方法
5.遇到的坑
i.当java对象的字段属性是数字类型时,需要对excel表中的字段做分列处理,否则会报错
java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell
解决办法:
a.选定该列数据
b.点菜单“数据”—“分列”
c.点两次“下一步”
d.在“列数据格式”中选择“文本”—“完成”
完成后在单元格右上角会有一个绿色的标志
ii.pojo对象的属性最好都定义成基本数据类型的封装类型,这样的话数据库单元格为空就不会报错。
例子:
针对Excel数据进行导入操作:
a.正例:
正常输出对应的字段为null:
b.反例:
会报错:
java.lang.IllegalArgumentException: Can not set int field com.ywgroup.iecloud.assetmanagement.testExcel.Dog.age to null value