while (it.hasNext()) {
index++;
row = sheet.createRow(index);
User t = (User) it.next();
// 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
Field[] fields = t.getClass().getDeclaredFields();
for (short i = 0; i < fields.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style2);
Field field = fields[i];
String fieldName = field.getName();
//fieldName 属性名 如果对属性需要处理的话.用这个区分***我用性别做处理吧
//
String getMethodName = "get"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);//注意 实体get Set不要自己改名字不然反射会有问题
try {
@SuppressWarnings("rawtypes")
Class tCls = t.getClass();
Method getMethod = tCls.getMethod(getMethodName,
new Class[] {});
Object value = getMethod.invoke(t, new Object[] {});
// TODO begin 注意这段 是对属性的值进行处理
这是个例子://假设对年龄做了处理 都帮乌龟们减点小寿命
if(fieldName.equals("age")){
int num =(Integer)value;
System.out.println("这只王八"+num+"岁了");
}
// 判断值的类型后进行强制类型转换
String textValue = null;
//有boolean类型时
if (value instanceof Boolean) {
boolean bValue = (Boolean)value;
textValue = "男";
if (!bValue) {
textValue = "女";
}
} else if (value instanceof Date) {
Date date = (Date) value;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
textValue = sdf.format(date);
} else if (value instanceof byte[]) {
// 有图片时设置行高为60px;
row.setHeightInPoints(60);
// 设置图片所在列宽度为80px,注意这里单位的一个换算
sheet.setColumnWidth(i, (short) (35.7 * 80));
// sheet.autoSizeColumn(i);
byte[] bsValue = (byte[]) value;
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,
1023, 255, (short) 6, index, (short) 6, index);
anchor.setAnchorType(2);
patriarch.createPicture(anchor, workbook.addPicture(
bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));
} else {
// 其它数据类型都当作字符串处理
textValue = value.toString();
}
// TODO
// 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成