easyexcel 数据校验多个sheet页数据,并把错误信息已文件方式下载返回
时间: 2023-11-22 18:53:16 浏览: 40
可以使用 EasyExcel 的校验器来实现数据校验,具体步骤如下:
1. 定义校验规则
```java
// 定义校验规则
List<ExcelVerifyHandler> verifyHandlers = new ArrayList<>();
verifyHandlers.add(new MyVerifyHandler());
```
其中,`MyVerifyHandler` 是自定义的校验器,需要实现 `ExcelVerifyHandler` 接口。
2. 执行数据校验
```java
// 执行数据校验
ExcelReader excelReader = EasyExcel.read(inputStream).build();
excelReader.read(new Sheet(1, 1), new AnalysisEventListenerAdapter() {
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
// 校验器初始化
context.buildExcelVerifyHandlerChain().addAll(verifyHandlers);
}
@Override
public void onException(Exception exception, AnalysisContext context) {
// 异常处理
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 数据处理完成
}
});
```
其中,`inputStream` 是需要校验的 Excel 文件输入流,`Sheet(1, 1)` 表示校验第一个 sheet 页的数据。
3. 获取错误信息并输出到文件
```java
// 获取校验结果
List<ExcelVerifyResult> verifyResults = context.readWorkbookHolder().getExcelVerifyHandlerResultList();
// 输出错误信息到文件
if (!verifyResults.isEmpty()) {
// 生成错误信息文件
String outputFilePath = "error.xlsx";
ExcelWriter excelWriter = EasyExcel.write(outputFilePath).build();
// 写入错误信息到 Excel 文件
WriteSheet writeSheet = EasyExcel.writerSheet(0, "错误信息").build();
List<List<String>> errorData = new ArrayList<>();
verifyResults.forEach(result -> errorData.add(Arrays.asList(
result.getRowIndex().toString(),
result.getColumnIndex().toString(),
result.getMsg()
)));
excelWriter.write(errorData, writeSheet);
excelWriter.finish();
// 下载错误信息文件
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment;filename=" + outputFilePath);
try (InputStream inputStream = new FileInputStream(outputFilePath);
OutputStream outputStream = response.getOutputStream()) {
IOUtils.copy(inputStream, outputStream);
} finally {
Files.deleteIfExists(Paths.get(outputFilePath));
}
}
```
其中,`verifyResults` 是校验结果列表,每个元素包含错误的行号、列号和错误信息。可以将错误信息写入到一个 Excel 文件中,并将文件下载到客户端。