easypoi基本使用

目录

1 easypoi相关注解

2 easypoi的导出

 2 easypoi的导入


1 easypoi相关注解

        @Excel 作用到field上,是对Excel一列的一个描述

        @ExcelCollection 表示一个集合,主要针对一对多的导出

        @ExcelEntity 表示一个继续深入导出的实体,但没太多实际意义,只是告诉系统这个对象里面有通样导出的字段

        @ExcelIgnore 和名字一样表示这个字段被忽略导出过程

        @EcxelTarget 这个是作用于最外层的对象,描述这个对象的id,支持这个对象可以针对不同的导出做出不同处理

@Excel注解相关属性 :

        用在field属性上面,是对于excel的一个描述

name:[String]生成excel表中的列名

needMerge: [boolean]是否需要纵向合并单元格

orderNum:[String]用于指定Excel列中的顺序

savepath:【String】指定导出excel中图片的保存路径

type: 【String】导出类型 1文本 2图片 3函数 4数字 ,默认是文本

width: 【Double】指定导出excel列的宽度

isImportField:【boolean】 是否是导入的字段,如果没有说明是错误的excel

exportFormat:【String】导出excel的时间格式

importFormat:【String】导入excel的时间格式

format:【String】 相当于同时设置了exportFormat和importFormat

imageType:【int】导出类型 1从filed读取 2是从数据库中读取 默认是文件

suffix:【String】文字后缀,如%98变为98%

2 easypoi的导出

模拟将一个集合对象到处到excel表格中

User类:


@ExcelTarget("users")
public class User implements Serializable {
    @Excel(name = "编号")
    private Integer id;
    @Excel(name = "姓名")
    private String name;
    @Excel(name = "年龄",suffix = "*") //在列的后面加上"*"
    private Integer age;
    @Excel(name = "生日",width = 35.0,format = "yyyy-MM-dd")
    private Date bir;
    @Excel(name = "状态",replace = {"未删除_1","删除_0"}) //用"未删除替换1"
    private String status;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Date getBir() {
        return bir;
    }

    public void setBir(Date bir) {
        this.bir = bir;
    }

    public String getStatus() {
        return status;
    }

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

测试类:

/**
     * 模拟数据库中的数据
     * @return
     */
    public List<User> getUsers(){
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setId(i);
            user.setName("小王"+i);
            user.setAge(i);
            user.setBir(new Date());
            if(i%2 == 0){
                user.setStatus("1");
            }else {
                user.setStatus("0");
            }
            users.add(user);
        }
        return users;
    }

    @Test
    public void testExport() throws Exception{
        //获取数据
        List<User> users = getUsers();
        //导出excel
        //参数1:ExportParams导出配置对象 参数2:导出的类型 参数3:导出的数据集合
        Workbook workbook  = ExcelExportUtil.exportExcel(new ExportParams("用户信息列表", "用户信息"), User.class, users);
        //将excel写入指定位置
        FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\LiuBuJun\\Desktop\\预约信息表格\\aa.xls");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        workbook.close();
    }

测试结果:

注意:

 2 easypoi的导入

我们将我们刚刚导出的数据再次导入让其输出:

实体类:

@ExcelTarget("emps")
public class Emp {

    @Excel(name = "编号")
    private Integer id;
    @Excel(name = "姓名")
    private String name;
    @Excel(name = "年龄",suffix = "*") //在列的后面加上"*"
    private Integer age;
    @Excel(name = "生日",width = 35.0,format = "yyyy-MM-dd")
    private Date bir;
    @Excel(name = "状态",replace = {"未删除_1","删除_0"}) //用"未删除替换1"
    private String status;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Date getBir() {
        return bir;
    }

    public void setBir(Date bir) {
        this.bir = bir;
    }

    public String getStatus() {
        return status;
    }

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

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", bir=" + bir +
                ", status='" + status + '\'' +
                '}';
    }
}

 测试类:

    @Test
    public void testImport() throws Exception{
        ImportParams params = new ImportParams();
        params.setTitleRows(1);//标题占几行 告诉熊哪行开始读取
        params.setHeadRows(1);//header占几行
        //params.setStartSheetIndex(2);从第一个sheet开始读物,默认是1
        List<Emp> emps = ExcelImportUtil.importExcel(new FileInputStream("C:\\Users\\LiuBuJun\\Desktop\\预约信息表格\\aa.xls"), Emp.class, params);
        emps.forEach(System.out::println);
    }

测试结果:

由此可见easypoi相比apach的poi而言还是较为方便的。包含了许多功能,有时间再继续验。

        另外在说一下最近遇到的小问题,就是可能公司与第三方合作的时候,他们会发送表格数据来让我们排查问题,这个时候我们得根据excel表格中的某一列中的数据数据去我们数据库中做一个in查询,但是当表格中的数据量太大时,我们将列中国的数据一个粘贴复制太费事费力。

换句话说就是将表格中元素用单引号引起来并且用逗号隔开、

代码如下:

    @Test
    public void testImport() throws Exception{
        ImportParams params = new ImportParams();
        params.setTitleRows(1);//标题占几行 告诉熊哪行开始读取
        params.setHeadRows(1);//header占几行
        //params.setStartSheetIndex(2);从第一个sheet开始读物,默认是1
        List<Emp> emps = ExcelImportUtil.importExcel(new FileInputStream("C:\\Users\\LiuBuJun\\Desktop\\预约信息表格\\aa.xls"), Emp.class, params);
        StringBuffer buffer = new StringBuffer();
        String collect = emps.stream().map(emp -> "\'" + emp.getAge() + "\'").collect(Collectors.joining(","));
        System.out.println(collect);
    }

测试结果:

着样的话我们就不用一个个粘贴复制excel表格中的数据了。有关poi使用链接:poi导入/导出_set sail_2021的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值