提供了三个实现,
ExcelExportStylerBorderImpl有边框样式
ExcelExportStylerColorImpl有边框间隔行样式 ExcelExportStylerDefaultImpl 默认的样式
样式使用方法ExportParams中调用setStyler就可以了,必须实现有参构造器
publicExcelExportStylerBorderImpl(Workbook workbook) { super.createStyles(workbook); }
Excel模板导出
为了更好的导出Excel,以及Excel的样式定义,复杂的表头等功能对已代码设置的很复杂的情况下使用模板确实是更好的办法,下面这样的样式我们自己实现要实现好久,但是模板就比较容易实现了,Excel分分钟的事情,模板秉承的是继承你的Cell样式,尽量不破坏你的东西
1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13)
模板支持的语法
空格分割
三目运算 {{test ? obj:obj2}}
n: 表示这个cell是数值类型 {{n:}}
le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}} fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}} fn: 格式化数字 {{fn:(obj;###.00)}}
单引号表示常量值 '' 比如'1' 那么输出的就是 1 fe: 遍历数据,创建row !fe: 遍历数据不创建row
$fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入 !if: 删除当前列 {{!if:(test)}} &NULL&控制 ]] 换行符
语法就上面这些,前面7个都没啥需要讲的都是我们一样的语法,说下下面几个
8,9,10都是一样的就是for循环创建表格,不同的是fe是全部都创建自己的表格,!fe是先使用现有的表格,不够了再创建表格,$fe是把这样之下的先往下移动X行,在便利,说下3个的场景 第一个不说了,是不是都要创建
第二个是:比如我们就创建4行或者<4行,4行之后还有别的数据,那么我们就使用!fe来迭代
生成后不会影响其他数据
第三个是:当遍历行下面仍有数据时,不影响下面的数据,进行插入操作
输出结果
导出操作
提供两个方法,一个是都是模板,第二个是第一个封装,就是多个sheet的模板导出
我的使用方式,如果是样式复杂就是模板,样式简单就是代码导出的
Excel导入
注解导入
基于Excel注解导出,只要反过来看代码就可以了,基本上不用讲什么,导出支持的功能,基本上导入同样支持
Map导入
传入对象传入map就可以,返回Map
和上面的是同一个方法
Sax导入
支持的功能不如上面的丰富,不在会吃图片,紧支持基本类型, 对于大数据量导入请使用Sax,避免造成内存溢出
Excel数据校验
校验是集成的JSR303,可选hibernate或者Apache的实现,这个我就不讲了,请大家自行百度, 功能都是一样的,需要开启设置在ImportParams中
这是一个事前校验,一般是数据的合法性,针对数据唯一性什么的,可以使用接口校验
同时提供了导入校验的接口,是整个对象一起校验的,返回校验结果就可以,比较简单
比如
下面说下错误信息的处理
错误信息默认会追加到这一行最后创建一个Cell中去,就是你可以返回这个Excel给用户,再让他改,
同时,我们也希望存放到数据库中这是我们需要我们的Entity实现一个接口