Excel的导入与导出,整合POI和easyExcel进行二次封装和方法优化,实现更简单调用、更多方法选择和更多种数据返回,能够自动保存数据到数据库,兼容所有版本的Excel文件,支持xlsx和xls

Excel的导入与导出,整合POI和easyExcel进行二次封装和方法优化,实现更简单调用、更多方法选择和更多种数据返回,能够自动保存数据到数据库,兼容所有版本的Excel文件,支持xlsx和xls。

POI 和 EasyExcel 都各有优点和不足,用poi也挺好挺好,没有必要一定要用easyexcel。如果数据量大,如导出数据大于36656条可以考虑使用easyexcel,因为poi导出最大条数有限制。个人建议如果没有遇到OOM就用poi也挺好的。总的来说,EasyExcel 比 POI 在处理大数据量和内存消耗中要有很多优势,但毕竟也是进行的二次封装和优化,也有一些不足。

一、jar包依赖

<!--Excel操作相关开始-->
    <!-- xls格式excel依赖包 -->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.17</version>
    </dependency>
    <!--xlsx格式excel依赖包-->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.17</version>
    </dependency>
    <!-- easyexcel依赖包 -->
    <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>easyexcel</artifactId>
      <version>2.1.6</version>
    </dependency>
    <!-- 文件上传依赖 -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.2.1</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.55</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <!--<scope>provided</scope>-->
    </dependency>

    <!--Excel操作相关结束-->

二、EasyExcel 简单玩法

其实 POI 和 EasyExcel 两种使用起来已经比较简单了,多看一下相关的开发文档就可以实现相应的功能。但是,它们还不够最简单,最简单应该是什么呢?起码我只用写一行代码就可以完成 Excel 的导入或导出,自动返回需要的数据信息或者数据自动进入数据库,自动生成文件或下载。

简单使用一下 EasyExcel 的读取 Excel 功能,创建一个对象:

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.ycj.fastframe.excel.base.DataModel;

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.util.List;

/**
 * @author: Frank
 * @email 1320259466@qq.com
 * @date: 2020/4/4
 * @time: 10:27
 * @fuction: about the role of class.
 */


@HeadRowHeight(value = 40)
@ContentRowHeight(10)
@ColumnWidth(25)
public class UserExcel extends DataModel {
    /**
     * 用户ID
     */
    @ExcelProperty(value = "用户ID", index = 0)
    @ColumnWidth(value = 15)
    private String userId;
    /**
     * 用户名
     */
    @ExcelProperty(value = "用户名", index = 1)
    @ColumnWidth(value = 15)
    private String username;
    /**
     * 姓名
     */
    @ExcelProperty(value = "姓名", index = 2)
    @ColumnWidth(value = 15)
    private String name;

    /**
     * 用户名
     */
    @ExcelProperty(value = "年龄", index = 3)
    @ColumnWidth(value = 15)
    private int age;

    /**
     * 性别
     */
    @ExcelProperty(value = "性别", index = 4)
    @ColumnWidth(value = 15)
    private String sex;

    /**
     * 电话
     */
    @ExcelProperty(value = "电话", index = 5)
    @ColumnWidth(value = 15)
    private String phone;
    /**
     * 显示名称
     */
    @ExcelProperty(value = "昵称", index = 6)
    @ColumnWidth(value = 15)
    private String nickname;
    /**
     * 密码
     */
    @ExcelProperty(value = "密码", index = 7)
    @ColumnWidth(value = 20)
    private String password;
    /**
     * 邮箱
     */
    @ExcelProperty(value = "邮箱", index = 8)
    @ColumnWidth(value = 20)
    private String email;
    /**
     * 头像
     */
    @ExcelProperty(value = "头像", index = 9)
    @ColumnWidth(value = 20)
    private String avatar;
    /**
     * 0 正常
     * 1 禁用
     */
    @ExcelProperty(value = "状态\r0正常,1 禁用", index = 10)
    @ColumnWidth(value = 20)
    private String status;
    /**
     * 注册时间 yyyy-MM-dd HH:mm:ss格式
     */
    @ExcelProperty(value = "注册时间", index = 11)
    @ColumnWidth(value = 20)
    private String createdTime;

    public UserExcel(String userId, String username, String name, int age, String sex, String phone, String nickname, String password, String email, String avatar, String status, String createdTime) {
        this.userId = userId;
        this.username = username;
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.phone = phone;
        this.nickname = nickname;
        this.password = password;
        this.email = email;
        this.avatar = avatar;
        this.status = status;
        this.createdTime = createdTime;
    }

    public UserExcel() {

    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getCreatedTime() {
        return createdTime;
    }

    public void setCreatedTime(String createdTime) {
        this.createdTime = createdTime;
    }


    @Override
    public List<Object> readExcel(InputStream inputStream) {
        return EasyExcel.read(new BufferedInputStream(inputStream)).head(UserExcel.class).sheet().doReadSync();
    }
}


使用


            UserExcel userExcel=new UserExcel();
            List<Object> list = userExcel.readExcel(new FileInputStream(new File("D://ceshi/test.xlsx")));
            for (Object data:list){
                userExcel= (UserExcel) data;
                System.out.println(userExcel.getName()+"  "+userExcel.getAge()+"  "+userExcel.getSex()+"  "+userExcel.getPhone());
            }

总结:
还是感觉有点小麻烦啊,又要定义 对象类啥的,又要实现读取方法。

三、封装的jar包

1)、下载封装好的jar包,并放入项目,具体可以参照下面的连接中的 “1.集成到项目” 这一章节:
https://blog.csdn.net/u014374009/article/details/104783988

2)调用相应的方法导入 Excel ,返回数据信息 或 自动插入到指定的数据库中。

3)调用相应的方法导出 Excel ,把数据自动写入到指定的文件 或 自动通过 response 的 outputStrean 返回给用户下载。

4)相关的工具类,通过反射方法实现不同数据类型之间的转换。

5)在 base 包中定义好了 BaseModel 和 DataModel ,在实际使用中,封装的 jar 能够自动通过 反射 进行实例化和赋值,完成数据类型间的转换。

6)数据自动保存,在传入 数据库 连接信息和表名,可以自动把 Excel 中的数据保存到数据库中;也可以把数据库中的表信息导出到 Excel 文件中。

读取Excel:

在这里插入图片描述
在这里插入图片描述
写入Excel:
在这里插入图片描述
在这里插入图片描述

工具类:

在这里插入图片描述
在这里插入图片描述

所需 jar 包下载地址

相关jar包集成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码讲故事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值