您的位置:首页 > 编程语言 > Java开发

java easyreport 导入excel、 txt 数据复合属性(二)

2014-12-03 11:51 363 查看
在导入报表的时候,经常会遇到对象属性是集合或数组形似的,如学生会有多个老师,那么这种属性是集合或数组形式的报表如何设置,以及导入呢。
Teacher类

package model;

public class Teacher {
private String name;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return name+"|"+sex;
}
}
Student类
package model;

import java.util.List;

public class Student {
private String name;
private int age;
private Course course;
//teacher集合
private List<Teacher> teachers;
//private Teacher[] teachers;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
public List<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(List<Teacher> teachers) {
this.teachers = teachers;
}

}
导入数据
姓名年龄科目分数教师姓名教师性别
王老五12语文80张三丰
Excel导入DEMO TestExcelComPro
package example;

import java.io.File;
import java.io.FileInputStream;
import java.util.List;
import java.util.Map;

import model.Student;
import test.AbstractExcelTest;

import com.easyReport.read.temp.PropertyTemp;
import com.easyReport.read.temp.ReadTemp;

public class TestExcelComPro extends AbstractExcelTest<Student> {
@Override
public void test() {
FileInputStream fileInputStream;
try {
fileInputStream = new FileInputStream(new File("testFile/test2.xls"));
//testReadBean(fileInputStream);
testReadMap(fileInputStream);
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
protected ReadTemp bulidReadTemp() {
ReadTemp readTemp = new ReadTemp(1);
readTemp.addPropertyTemp(new PropertyTemp("姓名", "name"));
readTemp.addPropertyTemp(new PropertyTemp("年龄", "age"));
readTemp.addPropertyTemp(new PropertyTemp("科目", "course.name"));
readTemp.addPropertyTemp(new PropertyTemp("分数", "course.score"));
//teachers设置和course对象属性设置是一样的
readTemp.addPropertyTemp(new PropertyTemp("教师姓名", "teachers.name"));
readTemp.addPropertyTemp(new PropertyTemp("教师性别", "teachers.sex"));
return readTemp;
}

@Override
protected void writeBeanList(List<Student> modelLists) {
System.out.println("--------------bean---------------");
for (Student s : modelLists) {
System.out.println(s.getName() + "|"
+ s.getAge()+s.getCourse().getName()+"|"+s.getCourse().getScore()+"|"+s.getTeachers().get(0));
}
}

@Override
protected void writeMapList(List<Map<String, Object>> mapLists) {
System.out.println("--------------map---------------");
for (Map<String, Object> m : mapLists) {
System.out.println(m.get("name") + "|" + m.get("age")+"|" + m.get("course.name")+"|" + m.get("course.score")+
"|"+m.get("teachers.name")+"|"+m.get("teachers.sex"));
}
}

}
运行结果:
--------------bean---------------
王老五|12语文|80.0|张三丰|男
注意:
集合和数组内容必须为用户定义对象,且生成的数组或集合内容有且只有一个。
如果需要添加多个对象,需要手动实现,下一节讲解。

老师性别我们存入的时候往往是F,M形式表示,那么需要对导入性别数据进行格式转化。

我们可以通过Teacher setSex实现格式转换。在这里我们主要讲解通过实现IDataFormater接口实现数据格式化。
package formater;

import com.easyReport.dataformater.IDataFormater;

public class SexFormater implements IDataFormater{
public static final String MALE = "M";
public static final String FEMALE = "F";
@Override
public Object format(Object value) {
return format(value, null);
}

@Override
public Object format(Object value, String format) {
if(value == null)
return "";
String sex = value.toString();
if(sex.contains("男"))
return MALE;
if(sex.contains("女"))
return FEMALE;
return value;
}

}
Excel导入DEMO TestExcelComPro 修改如下

protected ReadTemp bulidReadTemp() {
ReadTemp readTemp = new ReadTemp(1);
readTemp.addPropertyTemp(new PropertyTemp("姓名", "name"));
readTemp.addPropertyTemp(new PropertyTemp("年龄", "age"));
readTemp.addPropertyTemp(new PropertyTemp("科目", "course.name"));
readTemp.addPropertyTemp(new PropertyTemp("分数", "course.score"));
readTemp.addPropertyTemp(new PropertyTemp("教师姓名", "teachers.name"));
readTemp.addPropertyTemp(new PropertyTemp("教师性别", "teachers.sex",new SexFormater()));
return readTemp;
}
运行结果:
--------------bean---------------
王老五|12语文|80.0|张三丰|M

注:很不好意思上传附件的时候把字节码打包上传了,请到第六章节下载!
本文出自 “菜鸟博博” 博客,请务必保留此出处http://zhangxiao2.blog.51cto.com/6342789/1585861
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: