#### 2.8 Excel导入校验
校验,是一个不可或缺的功能,现在java校验主要是JSR 303 规范,实现方式主流的有两种
* Hibernate Validator
* Apache Commons Validator
这个AutoPoi没有限制,只要你防止一个实现丢到maven中就可以了,但是Hibernate Validator用的貌似多一些 之前的版本AutoPoi有定义自己的实现,但是后来抛弃了,没有必要造这种轮子,这个了功能已经够丰富了
## 使用
***对象***
AutoPoi的校验使用也很简单,对象上加上通用的校验规则或者这定义的这个看你用的哪个实现 然后params.setNeedVerfiy(true);配置下需要校验就可以了 看下具体的代码
~~~
/**
* Email校验
*/
@Excel(name = "Email", width = 25)
private String email;
/**
* 最大
*/
@Excel(name = "Max")
@Max(value = 15,message = "max 最大值不能超过15" ,groups = {ViliGroupOne.class})
private int max;
/**
* 最小
*/
@Excel(name = "Min")
@Min(value = 3, groups = {ViliGroupTwo.class})
private int min;
/**
* 非空校验
*/
@Excel(name = "NotNull")
@NotNull
private String notNull;
/**
* 正则校验
*/
@Excel(name = "Regex")
@Pattern(regexp = "[\u4E00-\u9FA5]*", message = "不是中文")
private String regex;
~~~
这里的校验规则都是JSR 303 的,使用方式也是的,这里就不做解释了 然后使用方式是
~~~
@Test
public void basetest() {
try {
ImportParams params = new ImportParams();
params.setNeedVerfiy(true);
params.setVerfiyGroup(new Class[]{ViliGroupOne.class});
ExcelImportResult<ExcelVerifyEntity> result = ExcelImportUtil.importExcelMore(
new File(PoiPublicUtil.getWebRootPath("import/verfiy.xlsx")),
ExcelVerifyEntity.class, params);
FileOutputStream fos = new FileOutputStream("D:/excel/ExcelVerifyTest.basetest.xlsx");
result.getWorkbook().write(fos);
fos.close();
for (int i = 0; i < result.getList().size(); i++) {
System.out.println(ReflectionToStringBuilder.toString(result.getList().get(i)));
}
Assert.assertTrue(result.getList().size() == 1);
Assert.assertTrue(result.isVerfiyFail());
} catch (Exception e) {
LOGGER.error(e.getMessage(),e);
}
}
~~~
***ExcelImportResult***
我们会返回一个ExcelImportResult 对象,比我们平时返回的list多了一些元素
~~~
/**
* 结果集
*/
private List<T> list;
/**
* 是否存在校验失败
*/
private boolean verfiyFail;
/**
* 数据源
*/
private Workbook workbook;
~~~
一个是集合,是一个是是否有校验失败的数据,一个原本的文档,但是在文档后面追加了错误信息
***注意,这里的list,有两种返回***
* 一种是只返回正确的数据
* 一种是返回全部的数据,但是要求这个对象必须实现IExcelModel接口,如下
***IExcelModel***
~~~
public class ExcelVerifyEntityOfMode extends ExcelVerifyEntity implements IExcelModel {
private String errorMsg;
@Override
public String getErrorMsg() {
return errorMsg;
}
@Override
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}
~~~
**\*IExcelDataModel** 获取错误数据的行号
~~~
public interface IExcelDataModel {
/**
* 获取行号
* @return
*/
public int getRowNum();
/**
* 设置行号
* @param rowNum
*/
public void setRowNum(int rowNum);
}
~~~
需要对象实现这个接口
每行的错误数据也会填到这个错误信息中,方便用户后面自定义处理 看下代码
~~~
@Test
public void baseModetest() {
try {
ImportParams params = new ImportParams();
params.setNeedVerfiy(true);
ExcelImportResult<ExcelVerifyEntityOfMode> result = ExcelImportUtil.importExcelMore(
new FileInputStream(new File(PoiPublicUtil.getWebRootPath("import/verfiy.xlsx"))),
ExcelVerifyEntityOfMode.class, params);
FileOutputStream fos = new FileOutputStream("D:/excel/baseModetest.xlsx");
result.getWorkbook().write(fos);
fos.close();
for (int i = 0; i < result.getList().size(); i++) {
System.out.println(ReflectionToStringBuilder.toString(result.getList().get(i)));
}
Assert.assertTrue(result.getList().size() == 4);
} catch (Exception e) {
LOGGER.error(e.getMessage(),e);
}
}
~~~
***IExcelVerifyHandler***
加入上面的不满足你,你可以用接口实现自己的校验规则,比如唯一性校验,等等,需要返回错误信息和成功与否
~~~
public interface IExcelVerifyHandler<T> {
/**
* 导入校验方法
*
* @param obj
* 当前对象
* @return
*/
public ExcelVerifyHanlderResult verifyHandler(T obj);
}
~~~
调用顺序是先通用的,再接口,到这里校验的就完整了,下面给大家看下错误的excel返回 ![yy](https://static.oschina.net/uploads/img/201709/18141356_UPlR.png "错误返回")
- 1.前传
- 1.1前言
- 1.2 Autopoi 介绍
- 1.3 使用
- 1.4 测试项目
- 1.5 快速文档
- 1.6 示例
- 1.6.1 单表数据导出多表头示例
- 单表数据多表头导入注意bak
- 1.6.2 单表数据导出多sheet示例
- 1.6.3 excel根据模板导出
- 1.6.4 一对多导出needMerge示例
- 1.6.5 大数据导出示例
- 1.7 导出自定义选择列导出
- 2. Excel 注解版
- 2.0 @excel注解的使用
- 2.1 Excel导入导出
- 2.2 注解
- 2.3 注解导出,导入
- 2.3.1 对象定义
- 2.3.2 集合定义
- 2.3.3 图片的导出
- 2.3.4 Excel导入介绍
- 2.3.5 Excel导入小功能
- 2.3.6 图片的导入
- 2.3.7 Excel多Sheet导出
- 2.4 注解变种-更自由的导出
- 2.5 Map导入,自由发挥
- 2.6 Excel的样式自定义
- 2.7 如何自定义数据处理
- 2.8 Excel导入校验(暂不支持)
- 2.9 Excel 大批量读取
- 2.10 Excel大数据导出
- 2.11 groupname和ExcelEntity的name属性
- 3. Excel 模板版
- 3.1 模板 指令介绍
- 3.2 基本导出
- 3.3 模板当中使用注解
- 3.4 图片导出
- 3.5 横向遍历
- 4. Excel<->Html
- 4.1 Excel 的Html预览
- 4.2 html转Excel更神奇的导出
- 5. Word
- 5.1 word模板导出
- 6. PDF
- 7. Spring MVC
- 7.1 View 介绍
- 7.2 大数据导出View的用法
- 7.3 注解导出View用法
- 7.4 注解变种Map类型的导出View
- 7.5Excel模板导出View
- 7.6 PoiBaseView.render view的补救
- 8.问题归档
- 9.大数据量处理
- 10.autopoi升级4.0版本修改记录