java实现 Excel 导入导出

原创
2017/09/19 13:32
阅读数 748

日常工作中,Excel是我们经常需要处理的文件,报表的生成,数据的导出,几乎每个项目都需要写对应的处理.作者也是编写这块代码大军的一员,能否有方法让我们不用重复编写代码呢,能否只要简单配置就可以完成我们的Excel生成呢,
作者分析了Excel和对象的关系,发现Row就是我们的一个对象cell是我们的一个属性,从而开发了Easypoi,
下面讲解下用Excel 如何几乎不写代码的完成导入导出

首先是我们以一个对象,拿最简单的学生和老师的对象来举例子,讲解下常见的对象关联关系,Easypoi是如何处理的
首先是课程,这个是,我们的导出主要对象

@ExcelTarget("courseEntity")
public class CourseEntity implements java.io.Serializable {
    /** 主键 */
    private String        id;
    /** 课程名称 */
    @Excel(name = "课程名称", orderNum = "1", width = 25,needMerge = true)
    private String        name;
    /** 老师主键 */
    //@ExcelEntity(id = "major")
    private TeacherEntity chineseTeacher;
    /** 老师主键 */
    @ExcelEntity(id = "absent")
    private TeacherEntity mathTeacher;

    @ExcelCollection(name = "学生", orderNum = "4")
    private List<StudentEntity> students;

一个课程对应了一个老师的实体

 @ExcelEntity(id = "absent")
    private TeacherEntity mathTeacher;

@ExcelTarget("teacherEntity")
public class TeacherEntity implements java.io.Serializable {
    /** id */
    //@Excel(name = "主讲老师", orderNum = "2",isImportField = "true_major,true_absent")
    private String id;
    /** name */
    @Excel(name = "主讲老师_major,代课老师_absent", orderNum = "1",needMerge = true,isImportField = "true_major,true_absent")
    private String name;

算是我们常见的一对一的关系
然后一个课程有多个学生,就是一对多的关系

 @ExcelCollection(name = "学生", orderNum = "4")
    private List<StudentEntity> students;
    
     /**
     * 学生姓名
     */
    @Excel(name = "学生姓名", height = 20, width = 30, isImportField = "true_st")
    private String        name;
    /**
     * 学生性别
     */
    @Excel(name = "学生性别", replace = { "男_1", "女_2" }, suffix = "生", isImportField = "true_st")
    private int           sex;

    @Excel(name = "出生日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd", isImportField = "true_st", width = 20)
    private Date          birthday;

    @Excel(name = "进校日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd")
    private Date registrationDate;

这样我们就定义了一个包含一堆一和一堆多的一个实体,可能导出中没有这么复杂,跟多的是一个对象就搞定了
只需要个@Excel注解机可以

导出

现在我们定义好对象了,如何导出Excel --ExcelExportUtil 这个导出工具类

   public void testExportExcel_1() throws Exception {
        ExportParams params = new ExportParams("0328课程表", "日期:2016-03-28", "六年一班");
        Workbook workbook = ExcelExportUtil.exportExcel(params, CourseEntity.class,courseList);
        FileOutputStream fos = new FileOutputStream("D:/excel/0328课程表.xls");
        workbook.write(fos);
        fos.close();
    }
我们只要把我们定义好的对象的class传进去,以及对象的集合,Easypoi就可以返回一个Excel的workbook了,同时Easypoi是兼容03版本office和07版本office,你要穿个参数指定下类型及可以了,是不是不是比我们自己写代码简单多了,最少只需要2行代码就可以完成我们的office操作了

导入

我们把导出写完了,导入是不是很复杂呢,也不是,导入也是同样简单,定时实体和上面定义的方式一样
导入是用导入工具类

 ImportParams params = new ImportParams();
        params.setHeadRows(2);
        List<CourseEntity> list = ExcelImportUtil.importExcel(inputStream, CourseEntity.class, params);

定义下表头的参数,然后把流传入进去就可以得到我们的对象列表是不是so easy.赶快来使用吧

展开阅读全文
打赏
0
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
0
分享
返回顶部
顶部