您的位置:首页 > 文旅 > 美景 > java导入excel接口校验excel版本是否匹配

java导入excel接口校验excel版本是否匹配

2024/10/6 11:46:38 来源:https://blog.csdn.net/lzq2357639195/article/details/140099504  浏览:    关键词:java导入excel接口校验excel版本是否匹配

在业务开发中,一个功能有三四个版本的时候,对应的excel导入模板也是不同的,这个时候对于不同的导入接口就需要进行excel导入模板的校验。

1.思路

思想1:校验当前接口对应的dto字段列是否与当前excel对应的表头是否匹配。
思想2:模板中创建一个隐藏sheet,每次导入的时候读取隐藏sheet的sheet名
思想3:读取当前sheet的sheet名并比对该接口应该对应的sheet名

2.代码实现

2.1 校验excel表头代码

	// 判断双方的导入列是否一致。true一致,false不一致private static boolean verifyExcelVersion(Class clazz, Sheet sheet) {List<Field> fields = getImportFields(clazz);List<String> classFieldList = fields.stream().map(item -> {return item.getAnnotation(MyExcel.class).name();}).collect(Collectors.toList());Row headRow = sheet.getRow(0);int headRowCount = headRow.getLastCellNum() - headRow.getFirstCellNum();// 读取excel表头List<String> headStringList = new ArrayList<>();for (int c = 0; c < headRowCount; c++) {Cell cell = headRow.getCell(c);String excelVal = cell.getStringCellValue();headStringList.add(excelVal);}// 使用md5进行信息摘要加密,比对两方信息是否一致String excelHeadMd5 = DigestUtil.md5Hex(headStringList.toString());String classFieldMd5 = DigestUtil.md5Hex(classFieldList.toString());return StrUtil.equals(excelHeadMd5, classFieldMd5);}// 获取dto对应的导入列private static List<Field> getImportFields(Class clazz) {List<Field> collect = Arrays.stream(clazz.getDeclaredFields()).filter(field -> field.isAnnotationPresent(MyExcel.class)).sorted(Comparator.comparing(field -> field.getAnnotation(MyExcel.class).sort())).collect(Collectors.toList());return collect;}

引用代码

        boolean verifyExcelVersion = verifyExcelVersion(clazz, sheet);if (!verifyExcelVersion) {throw new RunTimeException("导入模板异常");}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com