|
|
|
@ -6,6 +6,7 @@ import java.io.IOException;
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
import java.io.OutputStream;
|
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
|
import java.lang.reflect.Method;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Date;
|
|
|
|
@ -344,21 +345,23 @@ public class ExcelUtil<T>
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 用于读取对象中的属性
|
|
|
|
|
Object value = getTargetValue(vo, field, attr);
|
|
|
|
|
String dateFormat = attr.dateFormat();
|
|
|
|
|
String readConverterExp = attr.readConverterExp();
|
|
|
|
|
if (StringUtils.isNotEmpty(dateFormat))
|
|
|
|
|
{
|
|
|
|
|
cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) field.get(vo)));
|
|
|
|
|
cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value));
|
|
|
|
|
}
|
|
|
|
|
else if (StringUtils.isNotEmpty(readConverterExp))
|
|
|
|
|
{
|
|
|
|
|
cell.setCellValue(convertByExp(String.valueOf(field.get(vo)), readConverterExp));
|
|
|
|
|
cell.setCellValue(convertByExp(String.valueOf(value), readConverterExp));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cell.setCellType(CellType.STRING);
|
|
|
|
|
// 如果数据存在就填入,不存在填入空格.
|
|
|
|
|
cell.setCellValue(StringUtils.isNull(field.get(vo)) ? attr.defaultValue() : field.get(vo) + attr.suffix());
|
|
|
|
|
cell.setCellValue(StringUtils.isNull(value) ? attr.defaultValue() : value + attr.suffix());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -455,7 +458,7 @@ public class ExcelUtil<T>
|
|
|
|
|
sheet.addValidationData(dataValidationList);
|
|
|
|
|
return sheet;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 解析导出值 0=男,1=女,2=未知
|
|
|
|
|
*
|
|
|
|
@ -509,4 +512,55 @@ public class ExcelUtil<T>
|
|
|
|
|
}
|
|
|
|
|
return downloadPath;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取bean中的属性值
|
|
|
|
|
*
|
|
|
|
|
* @param vo 实体对象
|
|
|
|
|
* @param field 字段
|
|
|
|
|
* @param excel 注解
|
|
|
|
|
* @return 最终的属性值
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
private Object getTargetValue(T vo, Field field, Excel excel) throws Exception
|
|
|
|
|
{
|
|
|
|
|
Object o = field.get(vo);
|
|
|
|
|
if (StringUtils.isNotEmpty(excel.targetAttr()))
|
|
|
|
|
{
|
|
|
|
|
String target = excel.targetAttr();
|
|
|
|
|
if (target.indexOf(".") > -1)
|
|
|
|
|
{
|
|
|
|
|
String[] targets = target.split("[.]");
|
|
|
|
|
for (String name : targets)
|
|
|
|
|
{
|
|
|
|
|
o = getValue(o, name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
o = getValue(o, target);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return o;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 以类的属性的get方法方法形式获取值
|
|
|
|
|
*
|
|
|
|
|
* @param o
|
|
|
|
|
* @param name
|
|
|
|
|
* @return value
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
private Object getValue(Object o, String name) throws Exception
|
|
|
|
|
{
|
|
|
|
|
if (StringUtils.isNotEmpty(name))
|
|
|
|
|
{
|
|
|
|
|
Class<?> clazz = o.getClass();
|
|
|
|
|
String methodName = "get" + name.substring(0, 1).toUpperCase() + name.substring(1);
|
|
|
|
|
Method method = clazz.getMethod(methodName);
|
|
|
|
|
o = method.invoke(o);
|
|
|
|
|
}
|
|
|
|
|
return o;
|
|
|
|
|
}
|
|
|
|
|
}
|