zoukankan      html  css  js  c++  java
  • easyexcel导入获取表头并且表头为不固定列

    Controller

    @PostMapping("upload")
        @ResponseBody
        public HashMap<String, Object> upload(@RequestParam(value = "file") MultipartFile file,
                                              @RequestParam(value = "ztId") int ztId,
                                              @RequestParam(value = "qj") String qj,
                                              @RequestParam(value = "gzlbId") String gzlbId) throws IOException {
          
            gzdrService.init(ztId, qj, gzlbId);
            //生成uuid
            String uuid = UUID.randomUUID().toString();
            GzdrListener gzdrListener = new GzdrListener(ztId, gzdrService, uuid, qj, gzlbId);
            EasyExcel.read(file.getInputStream(), gzdrListener).sheet("导入模板").doReadSync();
            HashMap<String, Object> hashMap = new HashMap<>();
            List<String> errMessage = gzdrListener.getErrMessage();
            if (errMessage.isEmpty()) {
                hashMap.put("success", true);
            } else {
                hashMap.put("success", false);
                hashMap.put("errMessage", errMessage);
            }
            return hashMap;
        }
    GzdrListener 

    public class GzdrListener extends AnalysisEventListener<Map<Integer, String>> {
    
        /**
         * 每隔128条存储数据库,然后清理list ,方便内存回收
         */
    
        private static final int BATCH_COUNT = 128;
        private int ztId;
        private List<String> errMessage;
        private GzdrService gzdrService;
        List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();
        private String uuid;
        private String qj;
        private String gzlbId;
    
        public GzdrListener(int ztId, GzdrService gzdrService, String uuid, String qj, String gzlbId) {
            this.ztId = ztId;
            this.gzdrService = gzdrService;
            this.uuid = uuid;
            this.qj = qj;
            this.gzlbId = gzlbId;
            errMessage = new ArrayList<>();
        }
    
        @Override
        public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
            logger.info("解析到一条头数据:{}, currentRowHolder: {}", headMap.toString(), context.readRowHolder().getRowIndex());
            list.add(headMap);
        }
    
        @Override
        public void invoke(Map<Integer, String> data, AnalysisContext context) {
            logger.info("解析到一条数据:{}, currentRowHolder: {}", data.toString(), context.readRowHolder().getRowIndex());
            list.add(data);
            // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
            if (list.size() >= BATCH_COUNT) {
                errMessage.addAll(saveData());
                // 存储完成清理 list
                list.clear();
            }
        }
    
        @Override
        public void doAfterAllAnalysed(AnalysisContext context) {
            // 这里也要保存数据,确保最后遗留的数据也存储到数据库
            errMessage.addAll(saveData());
            logger.info("所有数据解析完成!");
        }
    
        /**
         * 加上存储数据库
         */
        private List<String> saveData() {
            logger.info("{}条数据,开始存储数据库!,ztId:{}  ", list.size(), ztId);
            return gzdrService.save(list, ztId, uuid, qj, gzlbId);
        }
    
        public List<String> getErrMessage() {
            return errMessage;
        }
    
        public void setErrMessage(List<String> errMessage) {
            this.errMessage = errMessage;
        }
    
        public GzdrService getGzdrService() {
            return gzdrService;
        }
    
        public void setGzdrService(GzdrService gzdrService) {
            this.gzdrService = gzdrService;
        }
    
        private final static Logger logger = LoggerFactory.getLogger(GzdrListener.class);
    }
    gzdrService的save做对应的校验和保存就行了。
  • 相关阅读:
    flex+java+blazeds 多通道好文
    如何保持PC客户端一直处于登录状态
    函数进阶
    数据类型扩展
    python编码规范
    xpath轴定位
    IDEA Terminal 运行mvn命令报该命令不是内部命令
    java环境安装Firefox驱动/IE驱动
    java环境添加chrome驱动
    java安装selenium webdriver环境
  • 原文地址:https://www.cnblogs.com/pzw23/p/13354908.html
Copyright © 2011-2022 走看看