EasyPOI的局限性 & cn.afterturn.easypoi.exception.excel.ExcelExportException:Excel 模板错误

最近在用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.不知道怎么用模板的方式输出合并单元格

总结:如果有哪位兄弟知道以上几条的解决方案,请您务必联系小弟我告诉我解决方案!!万分感谢

猜你喜欢

转载自blog.csdn.net/qijingpei/article/details/79188508