使用EasyPoi进行对Excel表格的导入、导出

前言

本篇讲述EasyPOI的最基本使用,即导出和导入Excel文档。


1、添加EasyPoi依赖

<properties>
      <easypoi.version>4.1.2</easypoi.version>
</properties>

<dependencies>
		<!-- easy-poi -->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>${easypoi.version}</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>${easypoi.version}</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
			<version>${easypoi.version}</version>
        </dependency>
</dependencies>

2、java测试类

	@Test
    public void directExportExcelByObject() throws IOException {
        List<StudentVO> list = new ArrayList<>(16);
        StudentVO student;
        Random random = new Random();
        for (int i = 0; i < 10; i++) {
            student = new StudentVO(i + "",
                    "name" + i,
                    random.nextInt(2),
                    random.nextInt(100),
                    new Date(),
                    "className" + i);
            student.setSchoolName("学校名称" + i);
            student.setSchoolAddress("学校地址" + i);
            list.add(student);
        }

        ExportParams exportParams = new ExportParams();
        // 设置sheet得名称
        exportParams.setSheetName("我是sheet名字");
        List<Map<String, Object>> sheetsList = new ArrayList<>();
        // 创建sheet1使用得map
        Map<String, Object> deptExportMap = new HashMap<>();
        // title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetName
        deptExportMap.put("title", exportParams);
        // 模版导出对应得实体类型
        deptExportMap.put("entity", StudentVO.class);
        // sheet中要填充得数据
        deptExportMap.put("data", list);
        sheetsList.add(deptExportMap);

        // 创建参数对象(用来设定excel得sheet得内容等信息)
        ExportParams empExportParams = new ExportParams();
        empExportParams.setSheetName("我是sheet名字2");
        // 创建sheet2使用得map
        Map<String, Object> empExportMap = new HashMap<>();
        empExportMap.put("title", empExportParams);
        empExportMap.put("entity", StudentVO.class);
        empExportMap.put("data", list);
        sheetsList.add(empExportMap);


        // 生成workbook 并导出
        Workbook workbook = ExcelExportUtil.exportExcel(sheetsList,ExcelType.XSSF);
        //Workbook workbook1 = ExcelExportUtil.exportExcel(exportParams, StudentVO.class, list);
      /*  File savefile = new File("C:/Users/JustryDeng/Desktop/");
        if (!savefile.exists()) {
            boolean result = savefile.mkdirs();
            System.out.println("目录不存在,创建" + result);
        }*/
        FileOutputStream fos = new FileOutputStream("D:\\test\\student11.xlsx");
        workbook.write(fos);
        fos.close();
    }

3、实体类注解

/**
 * 学校模型
 */
@Data
class SchoolVO {

    /**
     * 学校名称
     */
    @Excel(name = "学校名称", orderNum = "6", width = 20)
    private String schoolName;

    /**
     * 学校地址
     */
    @Excel(name = "学校地址", orderNum = "8", width = 20)
    private String schoolAddress;


}

@Data
class StudentVO extends SchoolVO {

    /**
     * name指定导出excel时生成的列名
     * orderNum可指定导出的该属性对应的所在列的位置
     * width设置单元格宽度
     * type设置导出类型  1是文本, 2是图片, 3是函数,10 数字 默认是文本
     */
    @Excel(name = "学号", orderNum = "1", type = 10, width = 15)
    private String studentID;

    @Excel(name = "姓名", orderNum = "2", width = 15)
    private String name;

    /**
     * 当gender为1时,导出的结果为 男, 当gender为0时,导出的结果为 女
     * mergeVertical设置是否纵向合并列
     */
    @Excel(name = "性别", mergeVertical = true, replace = {"男_1", "女_0"}, orderNum = "3", width = 5)
    private Integer gender;

    /**
     * type设置导出类型  1是文本, 2是图片, 3是函数,10 数字 默认是文本
     */
    @Excel(name = "年龄", orderNum = "4", type = 10, width = 5)
    private int age;

    /**
     * 将Data日期导出为yyyy-MM-dd格式
     * mergeVertical设置是否纵向合并列
     * mergeRely设置合并列的前提条件,即:只有当索引为2的列(即:"性别"列)已经
     * 合并了时,那么此时这一列的纵向相同时,才能纵向合并;如果引为2的
     * 列(即:"性别"列)纵向数据不同,那么就算此列的纵向数据相同,那么
     * 也不会合并
     */
    @Excel(name = "入校时间", mergeVertical = true, mergeRely = {2}, format = "yyyy-MM-dd", orderNum = "5", width = 20)
    private Date entranceTime;

    @Excel(name = "班级", orderNum = "7", width = 15)
    private String className;

    /**
     * 无参构造
     */
    public StudentVO() {
    }

    /**
     * 全参构造
     */
    public StudentVO(String studentID, String name, Integer gender,
                     int age, Date entranceTime, String className) {
        this.studentID = studentID;
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.entranceTime = entranceTime;
        this.className = className;
    }
}

4、导出结果

excle


总结

如果此篇文章有帮助到您, 希望打大佬们能关注点赞收藏评论支持一波,非常感谢大家!
如果有不对的地方请指正!!!

参考1
参考2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,easypoi 是一款用于简化 POI 操作的工具库。它提供了一种使用注解的方式来定义表格的属性,从而简化了 Excel导入导出操作。下面我将通过一个实例来帮助你理解 easypoi使用。 假设我们有一个简单的实体类 User,包含了用户的姓名、年龄、性别和地址四个属性,如下所示: ``` public class User { @Excel(name = "姓名") private String name; @Excel(name = "年龄") private Integer age; @Excel(name = "性别") private String gender; @Excel(name = "地址") private String address; // 省略 getter 和 setter 方法 } ``` 我们要将一组 User 对象导出Excel 文件中,可以通过 easypoi 的注解来定义表格的属性。首先,我们需要创建一个 Excel 实体类,用于描述表格的结构,如下所示: ``` public class UserExcel { @Excel(name = "序号") private Integer no; @Excel(name = "姓名") private String name; @Excel(name = "年龄") private Integer age; @Excel(name = "性别", replace = {"男_1", "女_2"}) private String gender; @Excel(name = "地址") private String address; // 省略 getter 和 setter 方法 } ``` 在这个实体类中,我们使用 @Excel 注解来定义表格的各列,可以指定列名、列宽、列高、列的格式等属性。其中 replace 属性用于将指定的字符串替换为数字,用于将性别从字符串类型转换为数字类型。 接下来,我们需要编写导出方法,用于将 User 对象导出Excel 文件中。代码如下所示: ``` public void exportExcel(List<User> userList) { List<UserExcel> list = new ArrayList<>(); for (int i = 0; i < userList.size(); i++) { User user = userList.get(i); UserExcel userExcel = new UserExcel(); userExcel.setNo(i + 1); userExcel.setName(user.getName()); userExcel.setAge(user.getAge()); userExcel.setGender(user.getGender()); userExcel.setAddress(user.getAddress()); list.add(userExcel); } // 导出 Excel 文件 String fileName = "用户列表.xls"; ExportParams params = new ExportParams("用户列表", "Sheet1"); Workbook workbook = ExcelExportUtil.exportExcel(params, UserExcel.class, list); try { HttpServletResponse response = ServletActionContext.getResponse(); response.reset(); response.setContentType("application/octet-stream; charset=utf-8"); response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes(), "iso-8859-1")); OutputStream os = response.getOutputStream(); workbook.write(os); os.flush(); os.close(); } catch (IOException e) { e.printStackTrace(); } } ``` 在这个方法中,我们首先将 User 对象转换为 UserExcel 对象,然后使用 easypoiExcelExportUtil 类将数据导出Excel 文件中。为了将 Excel 文件作为附件下载,我们还需要设置响应头信息,将文件的格式设置为 octet-stream,同时将文件名进行编码。 通过上述的代码,我们就可以将 User 对象导出Excel 文件中了。需要注意的是,我们只需要关注数据的转换和格式化,而无需关注 Excel 的底层实现,从而实现了一种简单、易用的 Excel 导出方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lfwh

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

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

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

打赏作者

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

抵扣说明:

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

余额充值