#### 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返回 
- 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版本修改記錄