使用eseyExcel实现java导入Excel并校验
时间: 2024-05-06 09:21:38 浏览: 170
好的,您想了解如何使用EasyExcel实现Java导入Excel并校验数据。首先,您需要在项目中引入EasyExcel的依赖,在pom.xml文件中添加如下代码:
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.7</version>
</dependency>
```
接着,您可以参考以下的代码,使用EasyExcel实现Java导入Excel并校验数据:
```java
public class ExcelUtil {
/**
* 导入Excel
*
* @param inputStream Excel文件流
* @param clazz Excel数据对应的Java对象
* @param <T> 类型参数
* @return Excel数据列表
*/
public static <T> List<T> importExcel(InputStream inputStream, Class<T> clazz) {
ExcelReader excelReader = null;
try {
excelReader = new ExcelReader(inputStream, null, new AnalysisEventListener<T>() {
private List<T> list = new ArrayList<>();
@Override
public void invoke(T data, AnalysisContext context) {
list.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
@Override
public void onException(Exception exception, AnalysisContext context) {
throw new RuntimeException("Excel导入异常:" + exception.getMessage());
}
public List<T> getList() {
return list;
}
});
excelReader.read(new Sheet(1, 1, clazz));
return excelReader.getEventListener().getList();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("Excel导入异常:" + e.getMessage());
} finally {
if (excelReader != null) {
excelReader.finish();
}
}
}
/**
* 校验Excel数据
*
* @param dataList Excel数据列表
* @param clazz Excel数据对应的Java对象
* @param <T> 类型参数
* @return 校验结果
*/
public static <T> ValidationResult validateExcel(List<T> dataList, Class<T> clazz) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
ValidationResult result = new ValidationResult();
result.setHasErrors(false);
for (int i = 0; i < dataList.size(); i++) {
T data = dataList.get(i);
Set<ConstraintViolation<T>> violations = validator.validate(data);
if (violations.size() > 0) {
result.setHasErrors(true);
Map<String, String> errorMap = new HashMap<>();
for (ConstraintViolation<T> violation : violations) {
errorMap.put(violation.getPropertyPath().toString(), violation.getMessage());
}
result.getErrorMap().put(i + 1, errorMap);
}
}
return result;
}
/**
* 校验结果
*/
public static class ValidationResult {
/**
* 是否有错误
*/
private boolean hasErrors;
/**
* 错误信息
*/
private Map<Integer, Map<String, String>> errorMap = new HashMap<>();
public boolean isHasErrors() {
return hasErrors;
}
public void setHasErrors(boolean hasErrors) {
this.hasErrors = hasErrors;
}
public Map<Integer, Map<String, String>> getErrorMap() {
return errorMap;
}
public void setErrorMap(Map<Integer, Map<String, String>> errorMap) {
this.errorMap = errorMap;
}
}
}
```
解释一下上述代码,首先是importExcel()方法,它将Excel文件流和Java对象的Class类型作为参数,使用EasyExcel实现Excel导入,并将Excel数据转换成Java对象的列表返回。
然后是validateExcel()方法,它将Excel数据列表和Java对象的Class类型作为参数,使用Java Bean Validation框架校验Java对象的属性值是否合法,最终将校验结果封装成ValidationResult对象返回。
最后是ValidationResult类,它封装了校验结果。其中,hasErrors属性表示是否有错误,errorMap属性表示错误信息的映射关系,其中Key是Excel中的行号,Value是错误信息的映射关系。
希望能够帮助您实现Java导入Excel并校验数据。
阅读全文