java excel 表头检查(贴代码)
程序员文章站
2022-06-27 23:27:16
本方法适用于模型中使用exce注解标注的模型 的excel表头检查 说明: 1 该方法为随手所写,较为粗糙,根据自己需求可自行改进2 该方法不检查excel中标题书序和模型中标题顺序是否一致(需要检查的可以自己优化)3 excel中标题名称 与模型中标题名称相比 低于标准值(模型中的标题)则返回false /** * 检查模板标题行模型是否匹配 不检查顺序(需要检查顺序的可自己优化) * * @param file 上传的excel 文件 对象 * @param pojoC......
本方法适用于模型中使用exce注解标注的模型 的excel表头检查 说明: 1 该方法为随手所写,较为粗糙,根据自己需求可自行改进 2 该方法不检查excel中标题书序和模型中标题顺序是否一致(需要检查的可以自己优化) 3 excel中标题名称 与模型中标题名称相比 低于标准值(模型中的标题)则返回false
/** * 检查模板标题行模型是否匹配 不检查顺序(需要检查顺序的可自己优化) * * @param file 上传的excel 文件 对象 * @param pojoClass 导入模型 * @param titleRow 标题行下标 * @param redundantNum 冗余数 默认为0 * @return */ public static Boolean checkTemplateTitle(File file, Class<?> pojoClass, Integer titleRow, int redundantNum) { //excel中标题行的所有标题 List<String> excelList = new ArrayList<>(); //注解中所有标题 List<String> list = new ArrayList<>(); Field[] fields = pojoClass.getDeclaredFields(); for (Field field : fields) { Annotation excelAnn = field.getAnnotation(Excel.class); if (null != excelAnn) { Excel ec = (Excel) excelAnn; String name = ec.name(); if (StringUtils.isNotBlank(name)) { list.add(name); } } } if (CollectionUtil.isEmpty(list)) { return true; } try { InputStream inputStream = new FileInputStream(file); if (!(inputStream.markSupported())) { inputStream = new PushbackInputStream(inputStream, 8); } Workbook book = WorkbookFactory.create(inputStream); Sheet sheet = book.getSheetAt(0); Row row = sheet.getRow(titleRow); for (int i = 0; i < row.getPhysicalNumberOfCells(); i++) { String value = row.getCell(i).getStringCellValue(); if (StringUtils.isNotBlank(value)) { excelList.add(value); } } } catch (Exception e) { throw new RuntimeException("读取文件表头报错"); } if (CollectionUtil.isEmpty(excelList)) { return false; } int i = 0; for (String name : list) { if (!excelList.contains(name)) { i++; } } if (i > redundantNum) { return false; } return true; }
本文地址:https://blog.csdn.net/qq_39644450/article/details/111906414