最近在用EasyPOI做项目,使用模板的方式来生成word\excel,遇到了很多问题,一个典型的问题就是模板中list的输出:
遇到了异常:cn.afterturn.easypoi.exception.excel.ExcelExportException:Excel 模板错误
原因:这种异常是因为{{$:fe 中有空格单元格,或者是合并了的单元格}}
1.Task对象的id等属性
Task放在一个对象里,可以输出的!
2.Task对象里有另外一个对象比如bigItem,能否通过task.bigItem.属性来输出呢?
有大神说可以,回头等有空试一下:
3.Task对象里有一个map,然后task.itemMap.key是可以的:
4.List遍历输出多个Task对象,在循环遍历中直接用task.id或者task.name这样的对象.属性,可能是输出不到word中,我采取的方法是把每一个Task对象转换成一个map,这样就可以显示了。
/*
* EasyPOI会检测不到list里的单个对象的属性的值
* 所以把单个对象转换成一个map
*/
public static Map convertBean(Object bean)
throws IntrospectionException, IllegalAccessException, InvocationTargetException {
Class type = bean.getClass();
Map returnMap = new HashMap();
BeanInfo beanInfo = Introspector.getBeanInfo(type);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (int i = 0; i< propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
if (!propertyName.equals("class")) {
Method readMethod = descriptor.getReadMethod();
Object result = readMethod.invoke(bean, new Object[0]);
if (result != null) {
returnMap.put(propertyName, result);
} else {
returnMap.put(propertyName, "");
}
}
}
// System.out.println(returnMap);
return returnMap;
}
5.好像是无法实现多级的遍历,比如list里又有一个list:
现在暂定的解决方法:把它们改成填写到一个map里,即把一个实体类转换成Map。
6.不知道怎么用模板的方式输出合并单元格
总结:如果有哪位兄弟知道以上几条的解决方案,请您务必联系小弟我告诉我解决方案!!万分感谢