EasyExcel简单实例

这篇具有很好参考价值的文章主要介绍了EasyExcel简单实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

准备工作

导入easyExcel依赖,注意版本:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.1</version>
        </dependency>

场景一:读取 Student 表

需求1:简单读取

源表:
EasyExcel简单实例,后端框架及组件,java,开发语言

1. 编写实体类
可以使用 @ExcelProperty 指定数据封装为实体类对象的规则,后面可以跟index 和 列名(二选一);
若不加注解则按照默认封装规则: ①根据 Excel 列与实体类属性的顺序②根据 Excel 列的单元格式与对象字段类型匹配。

@Data
public class Student {
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("年级")
    private String grade;
    @ExcelProperty("年龄")
    private int age;
}

2. 监听器
invoke():每读取一行就执行的方法,每一行数据会被封装成一个 student 对象(invoke方法的第一个参数);
doAfterAllAnalysed():读取结束后执行的方法;

class studentListener implements ReadListener<Student> {
    int i=1;

    @Override
    public void invoke(Student student, AnalysisContext context) {
        System.out.println("读取到第 "+(i++)+" 行:"+student);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("\nxlsx文件读取结束");
    }
}

3. 测试类
read():读取workbook工作簿,传入文件路径、实体类、监听器;
sheet():选定读取的工作表,默认读取第一个;
doRead():执行读操作;

public class easyExcelTest {
    @Test
    public void readTest() {
        String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";
        EasyExcel.read(filePath,
                        Student.class,
                        new studentListener()).
                sheet().
                doRead();
    }
}

打印效果:
EasyExcel简单实例,后端框架及组件,java,开发语言

需求2:读取到异常信息时不中断

源表:
当出现了不符合数据类型的数据时,希望不中断读取
EasyExcel简单实例,后端框架及组件,java,开发语言
1. 实体类:
不变;
2. 监听器:
只需要调整监听器,在监听器加入 onException()方法;

class studentListener implements ReadListener<Student> {
    int i = 1;

    @Override
    public void invoke(Student student, AnalysisContext context) {
        System.out.println("读取到第 " + (i++) + " 行:" + student);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("\nxlsx文件读取结束");
    }

    @Override
    public void onException(Exception exception, AnalysisContext context) throws Exception {
        System.out.println("读取异常:"+exception);
    }
}

3. 测试类:
不变;

打印效果:
异常数据被打印,且不中断读取;
EasyExcel简单实例,后端框架及组件,java,开发语言

需求3:读取所有的sheet工作表

源表:
此时多个sheet都有数据;
EasyExcel简单实例,后端框架及组件,java,开发语言

1. 实体类
不变;
2. 监听器
不变;
3. 测试类
将sheet().doRead改为 doReadAll()

public class easyExcelTest {
    @Test
    public void readTest() {
        String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";
        EasyExcel.read(filePath,
                        Student.class,
                        new studentListener()).
                doReadAll();
    }
}

效果:
读取到了两个sheet的数据:
EasyExcel简单实例,后端框架及组件,java,开发语言

需求4:读取指定的sheet工作表

源表:
此时多个sheet都有数据;
EasyExcel简单实例,后端框架及组件,java,开发语言

1. 实体类
不变;
2. 监听器
不变;
3. 测试类
在sheet()中传递指定sheet的index索引或者名称即可:

public class easyExcelTest {
    @Test
    public void readTest() {
        String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";
        EasyExcel.read(filePath,
                        Student.class,
                        new studentListener()).
                sheet("Sheet2").
                doRead();

        EasyExcel.read(filePath,
                        Student.class,
                        new studentListener()).
                sheet("Sheet1").
                doRead();
    }
}

效果:
此时先指定读取sheet2,再读取sheet1;
EasyExcel简单实例,后端框架及组件,java,开发语言

需求5:从指定的行开始读取

源表:
假设此时有多行表头,内容需要从第3行开始读取;
EasyExcel简单实例,后端框架及组件,java,开发语言

1. 实体类
不变;
2. 监听器
不变;
3. 测试类
使用 headRowNumber(),参数中填写开始读取的行数;(默认从第2行开始读取,即headRowNumber()默认参数是索引1);
此时读取的内容要从第3行开始,索引为2,所以填入headRowNumber()的参数为2!

public class easyExcelTest {
    @Test
    public void readTest() {
        String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";
        EasyExcel.read(filePath,
                        Student.class,
                        new studentListener()).
                sheet("Sheet1").
                headRowNumber(2).
                doRead();
    }
}

效果:
EasyExcel简单实例,后端框架及组件,java,开发语言

场景二:写入 Student 表

需求1:简单写入

1. 实体类
需要比读取excel多添加实体类的构造函数;

@Data
public class Student {
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("年级")
    private String grade;
    @ExcelProperty("年龄")
    private int age;
    
    public Student(){}

    public Student(String name, String grade, int age) {
        this.name = name;
        this.grade = grade;
        this.age = age;
    }
}

2. 模拟建数据的类
将每一行数据封装为Student对象,并放入一个List集合中;

class CreateData{
    public static List<Student> create(){
        List<Student> datas = Arrays.asList(
                new Student("张三","一年级",23),
                new Student("里斯","一年级",19),
                new Student("王五","一年级",22),
                new Student("赵六","一年级",21)
        );
        return datas;
    }
}

3. 测试类
写的时候会自动将实体类的属性作为excel表的表头;
sheet()的参数为写入的工作表;
doWrite()的参数为要写入的数据,要求格式为Collection集合类型;

  • 写法1
public class easyExcelTest {
    @Test
    public void writeTest() {
        String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";
        EasyExcel.write(filePath,
                        Student.class).
                sheet("学生表1").
                doWrite(CreateData.create()); // doWrite()的参数为 Collection 集合
    }
  • 写法2:
    适合写多个sheet;
public class easyExcelTest {
    @Test
    public void writeTest() {
        String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";
        try(ExcelWriter excelWriter=EasyExcel.write(filePath,Student.class).build()){
            WriteSheet writeSheet=EasyExcel.writerSheet("学生表2").build();
            excelWriter.write(CreateData.create(),writeSheet);
        }
    }

效果:
成功生成指定sheet表的数据!
EasyExcel简单实例,后端框架及组件,java,开发语言

需求2:写入指定列

  • 方法1:注解排除某列
    不写哪列就在对应的属性加上 @ExcelIgnore 属性;
    EasyExcel简单实例,后端框架及组件,java,开发语言

  • 方法2:给 excludeColumnFieldNames() 传入不包含的列
    注意:set中方的列明是实体类的属性名,而不是表格中的列名!
    EasyExcel简单实例,后端框架及组件,java,开发语言

  • 方法3:给 includeColumnFieldNames() 传入所有要写的列
    EasyExcel简单实例,后端框架及组件,java,开发语言

效果:
年龄age一列没有写入excel;
EasyExcel简单实例,后端框架及组件,java,开发语言

需求3:指定写入列的名称和顺序

1. 实体类
同样使用 @ExcelProperty 注解来指定写入列的名称和索引!
注意:顺序 index是从0开始的;
EasyExcel简单实例,后端框架及组件,java,开发语言

2. 模拟建数据的类
不变;
3. 测试类
不变;
效果:
EasyExcel简单实例,后端框架及组件,java,开发语言

需求4:写入多级表头

目标样式:
此时有多级表头;
EasyExcel简单实例,后端框架及组件,java,开发语言

  1. 实体类
    @ExcelProperty 注解中对表头进行分级!上层表头相同的属性就会归到一块!
    EasyExcel简单实例,后端框架及组件,java,开发语言
    2. 模拟建数据的类
    不变;
    3. 测试类
    不变;
    效果:
    EasyExcel简单实例,后端框架及组件,java,开发语言

需求5:重复写入

1. 实体类
不变;
2. 模拟建数据的类
不变;
3. 测试类
使用循环来实现重复写入;

public class easyExcelTest {
    @Test
    public void writeTest() {
        String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";
        try (ExcelWriter excelWriter = EasyExcel.write(filePath, Student.class).build()) {
            WriteSheet writeSheet = EasyExcel.writerSheet("学生表1").build();
            for (int i = 0; i < 3; i++) {
                excelWriter.write(CreateData.create(), writeSheet);
            }
        }
    }
}

效果:
重复写入了3次;
EasyExcel简单实例,后端框架及组件,java,开发语言

需求6:往多个工作簿写入相同数据

1. 实体类
不变;
2. 模拟建数据的类
不变;
3. 测试类
使用循环来实现重复写入;

public class easyExcelTest {
    @Test
    public void writeTest() {
        String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";
        try (ExcelWriter excelWriter = EasyExcel.write(filePath, Student.class).build()) {
            for (int i = 1; i <= 3; i++) {
                WriteSheet writeSheet = EasyExcel.writerSheet("学生表"+i).build();
                excelWriter.write(CreateData.create(), writeSheet);
            }
        }
    }
}

效果:
三个sheet都有相同的数据;
EasyExcel简单实例,后端框架及组件,java,开发语言

需求7:往多个工作簿写入不同数据

此时要在不同的sheet写入 student 和 teacher两个不同的表!
1. 实体类
新增 Teacher 实体类;

@Data
public class Teacher {
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("科目")
    private String subject;
    @ExcelProperty("年龄")
    private int age;

    public Teacher(){}

    public Teacher(String name, String subject, int age) {
        this.name = name;
        this.subject = subject;
        this.age = age;
    }
}

2. 模拟建数据的类
新增教师数据;

class CreateData {
    public static List<Student> createStudent() {
        List<Student> datas = Arrays.asList(
                new Student("张三", "一年级", 23),
                new Student("里斯", "一年级", 19),
                new Student("王五", "一年级", 22),
                new Student("赵六", "一年级", 21)
        );
        return datas;
    }

    public static List<Teacher> createTeacher() {
        List<Teacher> datas = Arrays.asList(
                new Teacher("张老师", "政治", 41),
                new Teacher("李老师", "高数", 42),
                new Teacher("王老师", "线代", 39),
                new Teacher("赵老师", "英语", 40)
        );
        return datas;
    }
}

3. 测试类
建立不同的sheet对象来写入;

public class easyExcelTest {
    @Test
    public void writeTest() {
        String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";
        // 此时 EasyExcel.write() 的参数不传入实体类.class
        try (ExcelWriter excelWriter = EasyExcel.write(filePath).build()) {
            //1. 创建不同的 sheet
            WriteSheet studentSheet = EasyExcel.writerSheet("学生表").head(Student.class).build();
            WriteSheet teacherSheet = EasyExcel.writerSheet("教师表").head(Teacher.class).build();
            //2. 向不同的sheet写入数据
            excelWriter.write(CreateData.createStudent(), studentSheet);
            excelWriter.write(CreateData.createTeacher(), teacherSheet);
        }
    }
}

效果:
在两个sheet分别写入了不同的数据;
EasyExcel简单实例,后端框架及组件,java,开发语言
EasyExcel简单实例,后端框架及组件,java,开发语言文章来源地址https://www.toymoban.com/news/detail-821477.html

到了这里,关于EasyExcel简单实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【java学习】EasyExcel的简单使用

    EasyExcel类是一套基于Java的开源Excel解析工具类,相较于传统的框架如Apache poi、jxl等更加快速、简洁,还可以解决大文件内存溢出问题,即能让使用者在不用考虑性能、内存的等因素的情况下,快速完成Excel的读(导入)、写(导出)等功能。 版本支持: 2+版本支持Java7Java6

    2024年02月16日
    浏览(42)
  • 017-信息打点-语言框架&开发组件&FastJson&Shiro&Log4j&SpringBoot等

    1、CMS指纹识别-不出网程序识别 2、开发框架识别-PHPPythonJava 3、开发组件识别-Java常见安全漏洞组件 解决: 1、CMS识别到后期漏洞利用和代码审计 2、开发框架识别到后期漏洞利用和代码审计 3、开发组件识别到后期漏洞利用和代码审计 演示案例: ➢指纹识别-本地工具-GotoSc

    2024年01月21日
    浏览(47)
  • 大型医院云HIS系统:采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发 融合B/S版电子病历系统

    一套医院云his系统源码 采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发。融合B/S版电子病历系统,支持电子病历四级,HIS与电子病历系统均拥有自主知识产权。 文末卡片获取联系! 基于云计算技术的B/S架构的医院管理系统(简称云HIS),采用前后

    2024年02月03日
    浏览(50)
  • HarmonyOS学习路之开发篇—Java UI框架(自定义组件与布局 一)

    HarmonyOS提供了一套复杂且强大的Java UI框架,其中Component提供内容显示,是界面中所有组件的基类。ComponentContainer作为容器容纳Component或ComponentContainer对象,并对它们进行布局。 Java UI框架也提供了一部分Component和ComponentContainer的具体子类,即常用的组件(比如:Text、Button、

    2024年02月09日
    浏览(39)
  • Java开发手册之单元测试,软件测试端简单易用的SPI框架

    【推荐】编写单元测试代码遵守 BCDE 原则,以保证被测试模块的交付质量。 B:Border,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等。 C:Correct,正确的输入,并得到预期的结果。 D:Design,与设计文档相结合,来编写单元测试。 E:Error,强制错误信息输

    2024年04月25日
    浏览(47)
  • 使用java解析和读取excel表格(EasyExcel的简单使用)

    ** ** Apache POI、JXL、Alibaba EasyExcel等。其中Apache POI基于DOM方式进行解析,将文件直接加载内存,所以速度较快,适合Excel文件数据量不大的应用场景; EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。他能让你在不用考虑性能、内存的等因素的情况下

    2024年01月16日
    浏览(47)
  • BsinCopilot:Java版端到端大语言模型开发框架

    BsinCopilot是基于BsinPaaS开源框架构建的大语言模型应用SaaS服务,借鉴langchain的框架思想,引入  langchian4j组件,微前端微服务的架构设计,可快速助您构建和体验端到端的AI应用。 概念 说明 Bsin 毕昇缩写,毕昇,中国北宋发明家,活字印刷术的发明者。毕昇出身平民,长期在

    2024年03月13日
    浏览(60)
  • Spring是一个开源的Java开发框架,它提供了一种快速、简单的方式来开发企业级应用程序

    Spring是一个开源的Java开发框架,它提供了一种快速、简单的方式来开发企业级应用程序。Spring的主要优点包括简化Java EE开发、提供依赖注入和面向切面编程等功能。以下是Spring的一些核心特性: 依赖注入(DI):Spring通过DI机制,将对象的依赖关系注入到应用程序中,简化了

    2024年02月03日
    浏览(80)
  • .Net初学 创建一个巨简单的.Net7 WebApi后端框架

    visual studio 2022 以下简称vs    Visual Studio安装指南_visual studio安装教程_技术人小柒的博客-CSDN博客 sqlserver 2022 以下简称mssql        SQL Server2022 Express和SSMS下载安装教程(超详细) (baidu.com) redis Redis下载安装图文教程(Windows版_超详细)_windows redis下载_Leeway啊樺的博客-CSDN博客

    2024年02月21日
    浏览(41)
  • unity 联网的游戏后端服务器框架和语言

    作者:蟑螂恶霸 链接:https://www.zhihu.com/question/381711152/answer/3083699647 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。   本文将从以下几个方面来讲解Unity客户端网络架构的设计与实现: 1.网络通信协议的选择 2.客户端网络框架的设计

    2024年02月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包