• 阿里云EasyExcel读写excel表数据


    阿里云EasyExcel读取excel表数据

    1、待读取的excel表test.xls

    在这里插入图片描述

    2、导入Maven依赖

    	<dependency>
    	    <groupId>com.alibaba</groupId>
    	    <artifactId>easyexcel</artifactId>
    	    <version>2.1.6</version>
    	</dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、创建对应excel表实体

    • @ExcelProperty注解对应excel表头,可根据自身需求添加属性
    @Data
    public class NExcelModelData {
        /**
         * 文件名称
         */
        @ExcelProperty("文件名称")
        private String fileName;
    
        /**
         * 文件大小
         */
        @ExcelProperty("文件大小")
        private BigDecimal fileSize;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    4、读Excel

    • 先获取文件流,比如 test.xls;
    • NExcelModelData是一个对应excel表的解析类;
    • NExcelModelDataListener中进行读取到的数据处理
     //读取excel
     EasyExcel.read(modelFile.getInputStream(), 
     				NExcelModelData.class,
     				new NExcelModelDataListener())
     				.sheet().doRead();
    
    • 1
    • 2
    • 3
    • 4
    • 5


    • NExcelModelDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
    public class NExcelModelDataListener extends AnalysisEventListener<NExcelModelData> {
    
        private static final Logger logger = LoggerFactory.getLogger(NExcelModelDataListener.class);
        //临时存储
        public static Map<String, NMetaData> map = new HashMap<>();
    
        /**
         * 每隔5条存储数据库,实际使用中可以50条自己定义即可,然后清理list ,方便内存回收
         */
        private static final int BATCH_COUNT = 5;
        
        /**
         * 缓存的数据
         */
         private List<NExcelModelData> nExcelModelDataList = new ArrayList<>();
         
        /**
         * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。
         */
        private FileService fileService;
       
        public NExcelModelDataListener() {
       	    // 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数
            fileService= new FileService ();
        }
    
        /**
         * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
         *
         * @param fileService
         */
        public DemoDataListener(FileService fileService) {
            this.fileService= fileService;
        }
    
       /**
         * 这个每一条数据解析都会来调用
         * 
         * @param newExcelModelData
         * @param analysisContext
         */
        @Override
        public void invoke(NExcelModelData newExcelModelData, AnalysisContext analysisContext) {
            logger.info("读取excel数据为:", JSON.toJSONString(newExcelModelData));
            nExcelModelDataList.add(newExcelModelData);
            logger.info("-------excel数据读取到第" + nExcelModelDataList.size() + "条-------");
            
            // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
            if (nExcelModelDataList.size() >= BATCH_COUNT) {
                saveData();
                //清空集合,防止内存溢出
                nExcelModelDataList.clear();
            }
        }
    
    
        /**
         * 所有数据解析完成了 都会来调用
         *
         * @param context
         */
         @Override
        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
            // 保存最后解析出来的数据
            saveData();
            logger.info("-------------excel数据读取完毕--------------");
        }
    
    
       /**
         * 执行的业务操作:
         * 
         * 1、此处可根据自身需求,进行对应业务存储处理(我这里是临时用map保存,因为后边要调用),可参考下面注释行代码
         * 
         * 2、也可直接进行简单的入库操作
         */
        public void saveData() {
            logger.info("------excel记录数:" + nExcelModelDataList.size() + "条----");
            //fileService.saveNExcelToMetadataData(nExcelModelDataList, map);
            fileService.save(nExcelModelDataList );
            logger.info("--------元数据成功返回-------------------");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83

    到此,阿里云工具EasyExcel读excel表格数据小案例就完成了,有兴趣的小伙伴可以自己去测试下!!!

    5、写Excel

    推荐2篇写Excel数据贼详细的文章:

  • 相关阅读:
    WEB前端代码书写规范
    Android Retrofit
    计算机毕业设计 SSM实验室故障报修系统 故障维修系统 故障信息管理系统
    基于JAVA课程在线反馈系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    Yolov系列之各个版本区别
    2024广东省职业技能大赛云计算赛项实战——容器化部署MariaDB
    爱尔眼科眼底病论坛糖网病变智能(AI)监测防治培训举办!
    2、计算机图形学——视图变换
    LAMP架构
    mysql 创建用户并授权
  • 原文地址:https://blog.csdn.net/fy512/article/details/126544906