Excel 解析,需要处理每个单元格,并把解析出有问题的单元格汇总起来导出,如果都没有问题继续执行流程
遂设计函数如下:
public Object parse(Cell cell) {
if (wrongFormat(cell)) {
reutrn null;
}
return getContent(cell);
}
但是后面发现需要把「具体的错误格式信息」也导出出来,这样我就想到了下面两种设计:
public class Response {
String errorMessage;
Object parseResult;
}
public Response parse(Cell cell) {
if (wrongFormat(cell)) {
return response;
}
return response;
}
和
public Object parse(Cell cell) {
if (wrongFormat(cell)) {
throw new Exception("wrong info");
}
return getContent(cell);
}
纠结第一种的原因:总感觉这种应用内的,不涉及前端调用和其他微服务交互的函数,返回这种 Response 不够简洁
纠结第二种的原因:这种纯格式的校验(判空、单元格类型)等,是否适合用抛出异常的方式控制流程?
不知道该如何选择,场景是后台场景批量导入,并发量应该比较低
1
RedBeanIce 205 天前 4
建议,直接报错即可。在最外层统一拦截,,,
至于报错展示一个,还是展示所有。。。可以实际情况而定。 |
2
NotFoundEgg 205 天前 1
定义一个业务异常类,外部只 catch 这个类型做处理
|
3
crudbychang 205 天前 1
可以考虑把错误信息用标记再批注写回,用 EasyExcel 可以很容易做
|
4
vivisidea 205 天前 1
```
public class Response { // enum errorType; String errorMessage; Object parseResult; } ``` 建议是第一种,增加一个 enum errorType ,便于上层分类处理,要不然要直接处理字符串 这个是 wrongFormat 里面能预见的 error ,不应该由异常来封装,exception 留给真正的异常( npe 这种) |
5
yidinghe 205 天前
首先,你要的是汇总,所以是不是要等全部单元格检查完了,再输出汇总结果?而不是遇到一个错误,就立刻抛出异常中止检查?
其次,你的汇总结果当中要包含什么有价值的信息?是否要包含单元格的位置,单元格的内容,以及为什么有问题?所以你的 Response 里面是不是应该有一个 List ? |
6
vegetablefriend OP |
7
vegetablefriend OP @yidinghe
1. 是的 所以需要对每个检查单元格内容方法,都环绕 try-catch 处理(个人认为比较蠢,但可以简化返回值结构) 2. 这个 Response 是指对每个单元格内容的检查的返回结果 |
8
vegetablefriend OP 最外层统一拦截,就不能做到每个单元格内容都检查完了,再汇总结果了
|
9
vegetablefriend OP @crudbychang 提供了一个新的思路,👍
|
10
vegetablefriend OP |
11
vegetablefriend OP |
12
xubeiyou 205 天前
用 easyexcel 解析后逐行处理 之后做字符串拼接 拼接后放在单独的列里面。存储下来就导出了,之前就这么做的 支持大概 10W 以内的吧 默认情况下 如果需要大数据量的话 就得分 sheet 解析了
|
13
k9990009 205 天前
你这个需求我搞过,大量的 excel 模板要校验,用的 easypoi,先解析成业务 POI 对象,再验证,解析和验证职责分开,不建议直接用 cell 。
对象实现一个支持收集错误信息的接口,去收集每一行的错误信息。校验方式有单字段格式校验、行与行校验、列与列校验,与外部数据源校验。有错误信息,额外加一列导出。还做了错误单元格标红,用的是每个字段都额外创建额外字段标记的,使用反射获取这个额外字段。校验都尽量抽成规则,后面做了个在线编辑版,校验代码才发现没法复用。 |
14
xywanghb 205 天前
易于变化的业务考虑适当扩展, 不易于变化的要高度内聚并极大可能的降低理解成本维护成本,怎么简单怎么来, 我个人感觉这个不易于变化, 推荐第二种
|
15
yusheng88 204 天前 via Android
我实际开发中的处理:
1. 上传文件后,在业务表中插入一条待验证记录,响应上传成功 2. 定时读取待验证记录,流式读文件,逐行检验,在单元格内用[]记录验证失败原因,输出到新文件。有异常则上传新文件。 3. 修改验证状态 整体就是加个用户上传记录,后台异步检验的思路。 如果是对接服务端的,追求实时性,还可以主动回调/推送检验结果 |