日常工作中,Excel是我们经常需要处理的文件,报表的生成,数据的导出,几乎每个项目都需要写对应的处理.作者也是编写这块代码大军的一员,能否有方法让我们不用重复编写代码呢,能否只要简单配置就可以完成我们的Excel生成呢,
作者分析了Excel和对象的关系,发现Row就是我们的一个对象cell是我们的一个属性,从而开发了Easypoi,
下面讲解下用Excel 如何几乎不写代码的完成导入导出
首先是我们以一个对象,拿最简单的学生和老师的对象来举例子,讲解下常见的对象关联关系,Easypoi是如何处理的
首先是课程,这个是,我们的导出主要对象
1@ExcelTarget("courseEntity") 2public class CourseEntity implements java.io.Serializable { 3 /** 主键 */ 4 private String id; 5 /** 课程名称 */ 6 @Excel(name = "课程名称", orderNum = "1", width = 25,needMerge = true) 7 private String name; 8 /** 老师主键 */ 9 //@ExcelEntity(id = "major") 10 private TeacherEntity chineseTeacher; 11 /** 老师主键 */ 12 @ExcelEntity(id = "absent") 13 private TeacherEntity mathTeacher; 14 15 @ExcelCollection(name = "学生", orderNum = "4") 16 private List<StudentEntity> students;
一个课程对应了一个老师的实体
1 @ExcelEntity(id = "absent") 2 private TeacherEntity mathTeacher; 3 4@ExcelTarget("teacherEntity") 5public class TeacherEntity implements java.io.Serializable { 6 /** id */ 7 //@Excel(name = "主讲老师", orderNum = "2",isImportField = "true_major,true_absent") 8 private String id; 9 /** name */ 10 @Excel(name = "主讲老师_major,代课老师_absent", orderNum = "1",needMerge = true,isImportField = "true_major,true_absent") 11 private String name;
算是我们常见的一对一的关系
然后一个课程有多个学生,就是一对多的关系
1 @ExcelCollection(name = "学生", orderNum = "4") 2 private List<StudentEntity> students; 3 4 /** 5 * 学生姓名 6 */ 7 @Excel(name = "学生姓名", height = 20, width = 30, isImportField = "true_st") 8 private String name; 9 /** 10 * 学生性别 11 */ 12 @Excel(name = "学生性别", replace = { "男_1", "女_2" }, suffix = "生", isImportField = "true_st") 13 private int sex; 14 15 @Excel(name = "出生日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd", isImportField = "true_st", width = 20) 16 private Date birthday; 17 18 @Excel(name = "进校日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd") 19 private Date registrationDate;
这样我们就定义了一个包含一堆一和一堆多的一个实体,可能导出中没有这么复杂,跟多的是一个对象就搞定了
只需要个@Excel注解机可以
导出
现在我们定义好对象了,如何导出Excel --ExcelExportUtil 这个导出工具类
1 public void testExportExcel_1() throws Exception { 2 ExportParams params = new ExportParams("0328课程表", "日期:2016-03-28", "六年一班"); 3 Workbook workbook = ExcelExportUtil.exportExcel(params, CourseEntity.class,courseList); 4 FileOutputStream fos = new FileOutputStream("D:/excel/0328课程表.xls"); 5 workbook.write(fos); 6 fos.close(); 7 } 8 9我们只要把我们定义好的对象的class传进去,以及对象的集合,Easypoi就可以返回一个Excel的workbook了,同时Easypoi是兼容03版本office和07版本office,你要穿个参数指定下类型及可以了,是不是不是比我们自己写代码简单多了,最少只需要2行代码就可以完成我们的office操作了
导入
我们把导出写完了,导入是不是很复杂呢,也不是,导入也是同样简单,定时实体和上面定义的方式一样
导入是用导入工具类
1 ImportParams params = new ImportParams(); 2 params.setHeadRows(2); 3 List<CourseEntity> list = ExcelImportUtil.importExcel(inputStream, CourseEntity.class, params);
定义下表头的参数,然后把流传入进去就可以得到我们的对象列表是不是so easy.赶快来使用吧