POI解析excel文件---校验指定数据是否正确

1. 
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>
2.
@RestController
@RequestMapping("/file")
@Slf4j
public class ExcelFileUploadParsing {
 /**
     *
     * @param file
     * @return ArrayList<HashMap<String,ArrayList>>
     */
    @PostMapping(value = "/detectDisease",produces = {"application/json;charset=utf-8"})
    @ResponseBody
    public ArrayList<HashMap<String,ArrayList>>  fileUpload(@RequestParam("file") MultipartFile file){
        String fileName = file.getOriginalFilename();
        System.out.println(fileName);
        String filePath = "D:\\WorkPlace";
        File dir = new File(filePath);
        if(!dir.exists()){
            dir.mkdir();
        }
        filePath = filePath+File.separator+fileName;
        System.out.println(filePath);
        try {
           return  DetectDiseaseCodeDescUtil.detectDiseaseCodeDesc(filePath);
        } catch (Exception e) {
            log.error("文件解析失败");
            return null;
        }
    }
3.
public class DetectDiseaseCodeDescUtil {

    /**
     * 比对文件: 多次给付重疾险智核问卷0810.xlsx.
     * 比对方法: 以 核保结论标识 (记为sheet2 B,C 列) 为基准, 比对 问卷及核保结论 (记为sheet1 R,V 列).
     * 将 sheet1 中不合法的行号打印到控制台
     *
     * @param filePath xlsx 文件路径
     */
    public static ArrayList<HashMap<String,ArrayList>> detectDiseaseCodeDesc(String filePath) throws Exception {
        //将文件读入
        FileInputStream in = new FileInputStream(new File(filePath));
        //创建工作薄
        Workbook workbook = new XSSFWorkbook(in);
        workbook.close();


        Sheet sheet0 = workbook.getSheetAt(0);
        int lastRowIndex = sheet0.getLastRowNum();
        int codeColumnIndex = 17;
        int descColumnIndex = 21;

        Map<String, String> enumMap = DetectDiseaseCodeDescUtil.getEnumMap();
        ArrayList<HashMap<String,ArrayList>> result = new ArrayList<>();
        HashMap<String, ArrayList> map = new HashMap<>();

        //不合法codeList
        ArrayList<Integer> illegalCodeRowNumList = new ArrayList<>(enumMap.size());
        //不合法文字描述 List
        ArrayList<Integer> illegalDescRowNumList = new ArrayList<>(enumMap.size());

        for (int i = 1; i <= lastRowIndex; i++) {
            Row rowI = sheet0.getRow(i);
            String cellCode = rowI.getCell(codeColumnIndex).getStringCellValue();
            if (enumMap.containsKey(cellCode)) {
                if (!enumMap.get(cellCode).equals(rowI.getCell(descColumnIndex).getStringCellValue())) {
                    //excel使用的 code 在枚举类内, 但描述和该code 在枚举类内的描述不对应, 记录行号
                    illegalDescRowNumList.add(i + 1);
                }
            } else {
                //excel使用的 code 不在枚举类内, 记录行号
                illegalCodeRowNumList.add(i + 1);
            }

        }
        map.put("illegalDescRowNumList",illegalDescRowNumList);
        map.put("illegalCodeRowNumList",illegalCodeRowNumList);
        result.add(map);
        System.out.println("illegalCodeRowNumList: " + illegalCodeRowNumList);
        System.out.println("illegalDescRowNumList: " + illegalDescRowNumList);
        return result;
    }

    /**
     * 将疾病 {@link cn.tk.demo.enums.SurveyDiseaseEnum} 放到 map 中
     *
     * @return map
     */
    private static Map<String, String> getEnumMap() {
        SurveyDiseaseEnum[] values = SurveyDiseaseEnum.values();
        HashMap<String, String> map = new HashMap<>(values.length);
        for (SurveyDiseaseEnum value : values) {
            map.put(value.getCode(), value.getDescription());
        }
        return map;
    }

    public static void main(String[] args) throws Exception {
        String filePath = "D:\\WorkPlace\\多次给付重疾险智核问卷0810.xlsx";
        DetectDiseaseCodeDescUtil.detectDiseaseCodeDesc(filePath);
    }
}

4.
public enum SurveyDiseaseEnum {

    //======次标体除组
    CiBiaoTiChuZu_$_EXingZhongLiuLeiZhongDaJiBing("B000", "恶性肿瘤类重大疾病"),
    CiBiaoTiChuZu_$_XinZangHuoXinXueGuanLeiZhongDaJiBing("B001", "心脏或心血管类重大疾病"),
    CiBiaoTiChuZu_$_NaoZhongFengHuoShenJingXiTongLeiZhongDaJiBing("B002", "脑中风或神经系统类重大疾病"),
    CiBiaoTiChuZu_$_QiTaLeiZhongDaJiBing("B003", "其他类重大疾病"),
    CiBiaoTiChuZu_$_TeShuLeiZhongDaJiBing("B004", "特殊类重大疾病"),
    CiBiaoTiChuZu_$_XinZangHuoXinXueGuanLei_NaoZhongFengHuoShenJingXiTongLei_QiTaLei_TeShuLeiZhongDaJiBing("B005", "心脏或心血管类重大疾病、脑中风或神经系统类重大疾病、其他类重大疾病、特殊类重大疾病"),
    CiBiaoTiChuZu_$_XinZangHuoXinXueGuanLei_NaoZhongFengHuoShenJingXiTongLei("B006", "心脏或心血管类重大疾病、脑中风或神经系统类重大疾病"),
    CiBiaoTiChuZu_$_XinZangHuoXinXueGuanLei_NaoZhongFengHuoShenJingXiTongLei_QiTaLeiZhongDaJiBing("B007", "心脏或心血管类重大疾病、脑中风或神经系统类重大疾病、其他类重大疾病"),
    CiBiaoTiChuZu_$_QiTaLei_TeShuLeiZhongDaJiBing("B008", "其他类重大疾病、特殊类重大疾病"),
    CiBiaoTiChuZu_$_EXingZhongLiuLei_XinZangHuoXinXueGuanLeiZhongDaJiBing("B009", "恶性肿瘤类重大疾病、心脏或心血管类重大疾病"),
    CiBiaoTiChuZu_$_XinZangHuoXinXueGuanLei_TeShuLeiZhongDaJiBing("B010", "心脏或心血管类重大疾病、特殊类重大疾病"),
    CiBiaoTiChuZu_$_EXingZhongLiuLei_XinZangHuoXinXueGuanLei_TeShuLeiZhongDaJiBing("B011", "恶性肿瘤类重大疾病、心脏或心血管类重大疾病、特殊类重大疾病"),
    CiBiaoTiChuZu_$_EXingZhongLiuLei_TeShuLeiZhongDaJiBing("B012", "恶性肿瘤类重大疾病、特殊类重大疾病"),


    //======确诊除组
    QueZhenZu_$_EXingZhongLiuLeiZhongDaJiBing("T000", "恶性肿瘤类重大疾病"),
    QueZhenZu_$_XinZangHuoXinXueGuanLeiZhongDaJiBing("T001", "心脏或心血管类重大疾病"),
    QueZhenZu_$_NaoZhongFengHuoShengJingXiTongLeiZhongDaJiBing("T002", "脑中风或神经系统类重大疾病"),
    QueZhenZu_$_QiTaLeiZhongDaJiBing("T003", "其他类重大疾病"),

    //======未分组
    JuBao("D001", "拒保"),

    //======普通除外
    PuTongChuWai_$_ChengBao("A000", "承保"),
    PuTongChuWai_$_YuanYouCanJiBuWei("A001", "原有残疾部位"),
    PuTongChuWai_$_JiaZhuangXianEXingZhongLiuJiQiFuFaHeZhuanYi("A002", "甲状腺恶性肿瘤及其复发和转移"),
    PuTongChuWai_$_YanZhongXingZangBing("A003", "严重心肌病"),
    PuTongChuWai_$_ShenDuHunMi("A004", "深度昏迷"),
    PuTongChuWai_$_RuXianEXingZhongLiu$BaoKuoYuanWeiAi$JiQiFuFaHeZhuanYi("A005", "乳腺恶性肿瘤(包括原位癌)及其复发和转移"),
    PuTongChuWai_$_QinShiXingPuTaoTai$HuoChengEXingPuTaoTai$("A006", "侵蚀性葡萄胎(或称恶性葡萄胎)"),

    //编号不连续
    PuTongChuWai_$_ShuangMuShiMing("A011", "双目失明"),
    PuTongChuWai_$_ShuangErShiCong("A012", "双耳失聪"),

    //编号不连续
    PuTongChuWai_$_YanZhongChangWeiDaoJiBingBingFaZheng("A016", "严重肠道疾病并发症"),

    PuTongChuWai_$_DanDaoChongJianShouShu("A020", "胆道重建手术"),

    PuTongChuWai_$_LuanChaoEXingZhongLiu$BaoKuoYuanWeiAi$JiQiFuFaHeZhuanYi("A025", "卵巢恶性肿瘤(包括原位癌)及其复发和转移");



    /**
     * 疾病编码
     */
    private String code;

    /**
     * 疾病描述
     */
    private String description;

    SurveyDiseaseEnum(String code, String description) {
        this.code = code;
        this.description = description;
    }

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值