JAVA关于Easypoi 导入导出 初认识

本文介绍了如何使用Easypoi进行Excel的导出和导入操作,包括POM依赖配置、注解使用、实体类定义以及模板样式设置。在导出时,展示了如何通过Easypoi实现数据的批量导出,而在导入时强调了HeadRows参数的重要性。此外,还提供了完整的Java代码示例,帮助读者理解Easypoi在1对1和1对多场景下的应用。
摘要由CSDN通过智能技术生成

首先maven项目应该先进行pom引入

        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>4.4.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>4.4.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>4.4.0</version>
        </dependency>

or SpringBoot的版本


        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.4.0</version>
        </dependency>

这个是1多N的做法 1对1 只需要在对象里面去除对应的List 实体:
!!! 1对多的情况下 导入数据解析 要设置HeadRows ,不然无法解析子对象信息
!!! 还有一种 是 注意模板的表头,多的字段的表头是@ExcelCollection注解的name值加下划线加多的一方字段上@Excel注解上的name值.
如表头xx_子xx 也能解析 但是不推荐 不好用 - -、

以下是easy poi 包带的几个默认注解:
@Excel 作用到filed上面,是对Excel一列的一个描述
@ExcelCollection 表示一个集合,主要针对一对多的导出,比如一个老师对应多个科目,科目就可以用集合表示
@ExcelEntity 表示一个继续深入导出的实体,但他没有太多的实际意义,只是告诉系统这个对象里面同样有导出的字段
@ExcelIgnore 和名字一样表示这个字段被忽略跳过这个导导出
@ExcelTarget 这个是作用于最外层的对象,描述这个对象的id,以便支持一个对象可以针对不同导出做出不同处理
注解中的ID的用法

1.导出 (无模板类型)直接上代码:

public class test2 {

    public static void main(String[] args) throws Exception{
        String path  = "G:\\JavaTest\\file";
        ExportParams params   = new ExportParams(null, "测试");
        Workbook workbook = null;
        List<MsgClient> list = new ArrayList<>();
        List<MsgClientGroup> groups = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            MsgClient client = new MsgClient();
            client.setClientName("小明" + i);
            client.setClientPhone("18797" + i);
            client.setCreateBy("JueYue");
            client.setId("1" + i);
            client.setRemark("测试" + i);
            if (i == 1 || i == 3){
                MsgClientGroup group = new MsgClientGroup();
                group.setGroupName("测试" + i);
                group.setBirthday(new Date());

                groups.add(group);

                client.setGroup(groups);
            }

            list.add(client);
        }
        // 重点代码  调用的是普通导出
        workbook = ExcelExportUtil.exportExcel(params,MsgClient.class,list);
        File savefile = new File(path);
        if (!savefile.exists()) {
            savefile.mkdirs();
        }
        FileOutputStream fos = new FileOutputStream(path+"\\1.xlsx");
        workbook.write(fos);
        fos.close();
    }
}

2、导入

public class test1 {
    public static void main(String[] args) {
        String path  = "G:\\JavaTest\\file\\1.xlsx";
        File file = new File(path);
        Date start = new Date();
        ImportParams params = new ImportParams();
		// 重点标注   如果不设置HeadRows   则子对象可能会出现无法读取的问题
        params.setHeadRows(2);
        params.setTitleRows(0);
        List<MsgClient> result = ExcelImportUtil.importExcel(
                new File(path),
                MsgClient.class, params);
        System.out.println(result);

    }
}

实体

@Data
public class MsgClient implements java.io.Serializable {
    /** id */
    private String id;
    // 电话号码(主键)
    @Excel(name = "电话号码",needMerge = true,width = 40)
    private String           clientPhone = null;
    // 客户姓名
    @Excel(name = "姓名",needMerge = true,width = 40)
    private String           clientName  = null;

    // 备注
    @Excel(name = "备注",needMerge = true,width = 40)
    private String           remark      = null;

    // 所属分组
    @ExcelCollection(name = "子数据")
    private List<MsgClientGroup>   group = new ArrayList<>();

    // 创建人
    private String           createBy    = null;

}

子实体

@Data
public class MsgClientGroup implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 6946265640897464878L;

    // 组名
    @Excel(name = "二级分组",width = 40)
    private String            groupName        = null;
    /**
     * 创建人
     */
    private String            createBy;
    // 生日
    @Excel(name = "出生日期", format = "yyyy-MM-dd", width = 20)
    private Date birthday    = null;

}

以下是模板样式:
在这里插入图片描述
如果要对easypoi 要有更深度的 请移步官网
将会有大数据形式,多线程等更多的介绍
以上是我的踩坑结果

以上路径是我本地写死
导出在开发中可能遇到最多的浏览器下载:

  // Excel 导出 通过浏览器下载的形式
  public static void export(HttpServletResponse response, Workbook workbook, String fileName) throws IOException {
        response.setHeader("Content-Disposition",
                "attachment;filename=" + new String(fileName.getBytes("UTF-8"), "iso8859-1"));
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        BufferedOutputStream bufferedOutPut = new BufferedOutputStream(response.getOutputStream());
        workbook.write(bufferedOutPut);
        bufferedOutPut.flush();
        bufferedOutPut.close();
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值