zoukankan      html  css  js  c++  java
  • Excel映射到实体-easyexcel工具

    来源

    项目需要把Excel进行解析,并映射到对象属性,实现类似Mybatis的ORM的效果。使用的方式是自定义注解+POI,这种方式代码复杂而且不易于维护。
    easyexcel是阿里巴巴开源的一个框架,解决了字段映射问题、OOM问题、使用复杂问题等,总之是一个很方便的工具
    GitHub链接

    使用

    添加依赖

    <!--添加maven依赖-->
    <!--easyexcel-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.3</version>
    </dependency>
    <!--fastjson-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.62</version>
    </dependency>
    <!--lombok-->
    <dependency>
    <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.10</version>
        <scope>provided</scope>
    </dependency>
    

    准备excel

    准备实体

    @Data
    public class Student {
        /**
         * 也可以使用@ExcelProperty(index = 2) 指定列数 
         * 官方不建议 index 和 name 同时用,要么一个对象只用index,要么一个对象只用name去匹配
         */
        @ExcelProperty("姓名")
        private String name;
        @ExcelProperty("学号")
        private String stuId;
        @ExcelProperty("班级")
        private String classId;
    }
    

    创建监听器

    public class DemoDataListener extends AnalysisEventListener<Student> {
        private List<Student> list = new LinkedList<Student>();
    
        /**
         * 这个每一条数据解析都会来调用
         * @param student
         * @param analysisContext
         */
        public void invoke(Student student, AnalysisContext analysisContext) {
            System.out.println("读取到一条数据 " + JSON.toJSONString(student));
            list.add(student);
        }
    
        /**
         * 所有数据读取完了调用
         * @param analysisContext
         */
        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
            System.out.println("读取完毕 所有数据  " + JSON.toJSONString(list));
        }
    }
    

    读取

    public class Main {
        public static void main(String[] args) {
            String fileName = "D:\1.xlsx";
            ExcelReader excelReader = EasyExcel.read(fileName, Student.class, new DemoDataListener()).build();
            ReadSheet readSheet = EasyExcel.readSheet(0).build();
            excelReader.read(readSheet);
            // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
            excelReader.finish();
        }
    }
    

    结果

    其他问题

    如果第一行不是表头,而是像以下数据怎么办呢

    很简单只需要设置readSheetheadRowNumber即可

    public class Main {
        public static void main(String[] args) {
            String fileName = "D:\1.xlsx";
            ExcelReader excelReader = EasyExcel.read(fileName, Student.class, new DemoDataListener()).build();
            ReadSheet readSheet = EasyExcel.readSheet(0).headRowNumber(2).build();
            excelReader.read(readSheet);
            // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
            excelReader.finish();
        }
    }
    

    其他复杂表格请参考
    官网文档

  • 相关阅读:
    机器学习进度09(逻辑回归)
    机器学习进度08(过欠拟合、岭回归)
    机器学习进度07(线性模型、损失函数、优化方法)
    Python绘制心形图(动态)
    Python发送QQ消息
    Python免费发送手机短信,推送消息
    Anaconda的安装与环境配置以及jupyter的使用
    第一章 概念部分
    k8s简介
    安装k8s遇到的问题
  • 原文地址:https://www.cnblogs.com/ingxx/p/11934628.html
Copyright © 2011-2022 走看看