• EasyExcel完成excel文件的导入导出


    简介

     常见的Excel分析框架有Apache poi 和EasyExcel, poi在另一篇已经介绍过了,详情可以看[https://www.cnblogs.com/jasmine-e/p/16064518.html]。
    这篇主要针对EasyExcel,它是阿里巴巴开源的一个excel处理框架,使用简单,节省内存。解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析,因此大大减少占用内存。官网:[https://github.com/alibaba/easyexcel]。

    入门案例

    一、导入pom依赖

    <dependencies>
    
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.7</version>
        </dependency>
    
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.5</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.xmlbeans</groupId>
            <artifactId>xmlbeans</artifactId>
            <version>3.1.0</version>
        </dependency>
    
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
    
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    
    </dependencies>
    

    二、创建实体类

    @Data
    public class ExcelStudentDTO {
    
        @ExcelProperty("姓名")
        private String name;
    
        @ExcelProperty("生日")
        private Date birthday;
    
        @ExcelProperty("薪资")
        private Double salary;
    }
    

    三、导出excel

    public class ExcelWriteTest {
        @Test
        public void simpleWriteXlsx() {
            String fileName = "d:/excel/simpleWrite.xlsx"; //需要提前新建目录
            // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
            EasyExcel.write(fileName, ExcelStudentDTO.class).sheet("模板").doWrite(data());
        }
        
        //辅助方法
        private List<ExcelStudentDTO> data(){
            List<ExcelStudentDTO> list = new ArrayList<>();
    
            //算上标题,做多可写65536行
            //超出:java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535)
            for (int i = 0; i < 65535; i++) {
                ExcelStudentDTO data = new ExcelStudentDTO();
                data.setName("Helen" + i);
                data.setBirthday(new Date());
                data.setSalary(123456.1234);
                list.add(data);
            }
    
            return list;
        }
    }
    

    四、读取Excel

    - 创建监听器

    @Slf4j
    public class ExcelStudentDTOListener extends AnalysisEventListener<ExcelStudentDTO> {
        
        /**
         * 这个每一条数据解析都会来调用
         */
        @Override
        public void invoke(ExcelStudentDTO data, AnalysisContext context) {
            log.info("解析到一条数据:{}", data);
    
        }
    
        /**
         * 所有数据解析完成了 都会来调用
         */
        @Override
        public void doAfterAllAnalysed(AnalysisContext context) {
            log.info("所有数据解析完成!");
        }
    }
    

    - 读取数据

    public class ExcelReadTest {
    
        /**
         * 最简单的读
         */
        @Test
        public void simpleReadXlsx() {
    
            String fileName = "d:/excel/simpleWrite.xlsx";
            // 这里默认读取第一个sheet
            EasyExcel.read(fileName, ExcelStudentDTO.class, new ExcelStudentDTOListener()).sheet().doRead();
        }
    
        @Test
        public void simpleReadXls() {
    
            String fileName = "d:/excel/simpleWrite.xls";
            EasyExcel.read(fileName, ExcelStudentDTO.class, new ExcelStudentDTOListener()).excelType(ExcelTypeEnum.XLS).sheet().doRead();
        }
    }
    
  • 相关阅读:
    《计算机网络》考研:2024/3/11:2.1.6-习题精选(5、6题暂未完成)
    智能优化算法期末复习(更新ing)
    LeetCode - 解题笔记 - 214 - Shortest Palindrome
    回流重绘零负担,网页加载快如闪电
    mysql日志(错误日志、binlog日志、查询日志、慢日志)
    套接口通用发送缓存区限定
    Kafka-3.0.1-Docker+集群 踩坑笔记
    Android 底部导航栏(一、BottomNavigationView+Menu+Fragment)
    美国一声令下,NVIDIA损失超350亿,国产芯片迅速顶上
    【论文阅读】检索增强发展历程及相关文章总结
  • 原文地址:https://www.cnblogs.com/jasmine-e/p/16064768.html