阿里开源的基于POI的EasyExcel导入导出

这里会介绍最基本的一个实现具体的导入导出的demo

比较高级的定制样式什么的在其他推文会写

在正式敲代码之前先做一下准备工作,先把实体类还有依赖引入

Student实体类,注释基本都有注解,如果不懂的可以去查一下easyexcel的文档


@Data
@ColumnWidth(20)
//@HeadRowHeight()             //表头行高
//@ContentRowHeight()         //内容行高
public class Student {

    /**
     * 名字
     */
    @ExcelProperty("姓名")
    private String name;

    /**
     * 性别
     */
    @ExcelProperty(value = "姓别",index = 2)    //index用来指定导出的表头所处顺序 是从0开始算的  默认是按照类的属性的顺序导出 推荐不要一起用
    private String gender;

    /**
     * 生日
     */
    @ExcelProperty("出生日期")//设置表头名字
    @ColumnWidth(20)//属性和列上都可以使用
    @DateTimeFormat("yyyy-MM-dd")//格式参照java.text.SimpleDatFormat
    private Date birthday;

    /**
     * id
     */
    @ExcelProperty("ID")
    @ExcelIgnore//忽略,不导出
    private String id;
}

引入依赖,pom.xml文件

 <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
            <scope>provided</scope>
        </dependency>
                <!--easyexcel-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.0</version>
        </dependency>

                <!--juit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

在正式敲代码之前需要先了解两个概念

1. 工作簿:指的是一整个excel文件

2. 工作表:指的是这个excel文件里面的每个sheet

接下来就可以正式的实现有关于导入导出的功能了

首先是导出功能

我把需要导出的文件放到了项目当中,结构如下,里面的easyExcel练习,xlsx

文件内容如下

 

 代码实现如下

@Test
    public void test01(){

        /*
        * 第一个参数:要读的文件的路径
        * 第二个参数:文件中的每一行数据要存储到的实体的类
        * 第三个参数:读监听器,每读一行内容,都会调用一次该对象的invoke方法,
        * 在invoke方法中可以操作使用读取到的数据
        * */
        //获取一个工作簿对象
        ExcelReaderBuilder readWorkBook = 
            EasyExcel.read("easyExcel练习.xlsx", Student.class, new StudentListener());

        //获取一个工作表对象
        ExcelReaderSheetBuilder sheet = readWorkBook.sheet();

        //获取内容
        sheet.doRead();
    }

监听器实现如下,只是简单的实现输出


public class StudentListener extends AnalysisEventListener<Student> {

    /**
     * 每读一行内容,都会调用一次invoke,在invoke中可以操作使用读取到的数据
     * @param student         学生
     * @param analysisContext 分析上下文
     */
    @Override
    public void invoke(Student student, AnalysisContext analysisContext) {
        System.out.println("student = " + student);
    }

    /**
     * 读取完整个文档之后调用的方法
     *
     * @param analysisContext 分析上下文
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
}

运行的结果如下

成功读出了,但是因为我的Students实体类中有birthday和id字段,但是我在这个excel中并没有填写,所以读出的是null,这里注意表格的属性要和实体类的对好,要不然读不了

 

 接下来是导出功能,代码实现如下

  @Test
    public void test02(){

        /*
        * 构建一个写的工作簿对象
        * 第一个参数:要写入的文件路径
        * 第二个参数:封装写入的数据的实体的类型
        * 返回:写的工作簿对象
        * */
        //工作簿对象
        ExcelWriterBuilder writeWorkBook = 
            EasyExcel.write("easyExcel练习--write.xlsx", Student.class);

        //工作表对象
        ExcelWriterSheetBuilder sheet = writeWorkBook.sheet();

        //准备数据
        List<Student> students = initData();

        //写
        sheet.doWrite(students);

        System.out.println("导出成功");
    }
    private static List<Student> initData(){
        ArrayList<Student> students = new ArrayList<Student>();
        Student data = new Student();
        for (int i = 0; i<10; i++){
            data.setName("学生名字" + i);
            data.setBirthday(new Date());
            data.setGender("男");
            students.add(data);
        }
        return students;
    }

后面的initData方法是用来造假数据的,然后参数都有注解,不懂的可以留言或者查官方文档

导出效果如下

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值