精华帖 (0) :: 良好帖 (4) :: 新手帖 (18) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-02
发现跟帖子http://www.iteye.com/topic/657977内容一样,难道是同一个人么?^_^
|
|
返回顶楼 | |
发表时间:2010-06-03
1.楼主的importExcel, exportExcel有很大的重构余地,每个方法都做了太多的工作。 2.JXL,poi, 这两个API基本和JDBC是同一级别的,在程序当中可以直接用,但会搞得这些低层的API与业务代码混在一起。 对它们进行封装是很有意义的。 3. 即使使用反射,如果能避免直接操作字段,就尽量避免,反射操作属性和方法是正常的,它不会破坏封装性。 4. 可以使用注解的方式,对字段与excel列进行绑定操作,但应该不是最好的方式。因为字段与列的映射是定义一个Sheet规则的一部分, 还有其它基本的规则,A:如:读取数据从第几行开始,因为列头是不需要读入的;文档最后几行可能是"注意事项“,这些也应该被忽略掉,这些 都是规则的一部分。 B:属性映射,不要映射到列头的内容,应该使用excel的列编号,列编号是稳定的,列头是容易被修改的。C:注解是写在代码上的, 修改映射关系是需要重新编译类的。 注解很强大,但处处以注解为先,有的时候并不是合理的,使用xml格式的配置更合理些。 |
|
返回顶楼 | |
发表时间:2010-06-03
H_eaven 写道 1.楼主的importExcel, exportExcel有很大的重构余地,每个方法都做了太多的工作。 2.JXL,poi, 这两个API基本和JDBC是同一级别的,在程序当中可以直接用,但会搞得这些低层的API与业务代码混在一起。 对它们进行封装是很有意义的。 3. 即使使用反射,如果能避免直接操作字段,就尽量避免,反射操作属性和方法是正常的,它不会破坏封装性。 4. 可以使用注解的方式,对字段与excel列进行绑定操作,但应该不是最好的方式。因为字段与列的映射是定义一个Sheet规则的一部分, 还有其它基本的规则,A:如:读取数据从第几行开始,因为列头是不需要读入的;文档最后几行可能是"注意事项“,这些也应该被忽略掉,这些 都是规则的一部分。 B:属性映射,不要映射到列头的内容,应该使用excel的列编号,列编号是稳定的,列头是容易被修改的。C:注解是写在代码上的, 修改映射关系是需要重新编译类的。 注解很强大,但处处以注解为先,有的时候并不是合理的,使用xml格式的配置更合理些。 这个建议很好。 |
|
返回顶楼 | |
发表时间:2010-06-03
Cindy_Lee 写道 请问楼主这个工具是否支持表查询出pojo对象有一对多或一对一关系的转换?
考虑到这种一对多或者多对一的关系了 正准备有时间扩展一下 |
|
返回顶楼 | |
发表时间:2010-06-07
代码有点看不太懂啊
不过注释很详细 回去慢慢研究了 谢谢了 |
|
返回顶楼 | |
发表时间:2010-06-11
nageer 写道 以前也做过类似的excel导入导出,但是是用xml配置的。lz的想法很好,但是有些地方还是有点看不懂。。。
eya 写道 public Collection<T> importExcel(File file ,String... pattern) { 不知道为什么pattern传入的是可变参数类型,后文应该也只是用到pattern[0]而已。 另外ImportExcel为什么要每次导入都去获取目标目标类的所有的字段列表呢,应该只要获取一次保存起来就行了吧。 eya 写道 /** * 类反射得到调用方法 */ // 得到目标目标类的所有的字段列表 Field filed[] = clazz.getDeclaredFields(); // 将所有标有Annotation的字段,也就是允许导入数据的字段,放入到一个map中 Map fieldmap = new HashMap(); // 循环读取所有字段 for (int i = 0; i < filed.length; i++) { Field f = filed[i]; // 得到单个字段上的Annotation ExcelAnnotation exa = f.getAnnotation(ExcelAnnotation.class); // 如果标识了Annotationd的话 if (exa != null) { // 构造设置了Annotation的字段的Setter方法 String fieldname = f.getName(); String setMethodName = "set" + fieldname.substring(0, 1).toUpperCase() + fieldname.substring(1); // 构造调用的method, Method setMethod = clazz.getMethod(setMethodName, new Class[] { f.getType() }); // 将这个method以Annotaion的名字为key来存入。 fieldmap.put(exa.exportName(), setMethod); } } 另外导出的时候会不会少导一条数据啊,我没有亲自运行过,但是看代码好像会把第一条数据少导出来,有错请指正。呵呵 必然第一条数据会导不出来 |
|
返回顶楼 | |
发表时间:2010-06-12
这个是导入的方法,第一条数据是标题行,用不着导入的
为什么需要标题行的原因,就在于我是通过标题行来判断时候是应该导入此列的 |
|
返回顶楼 | |
发表时间:2010-06-12
请教楼主,可以处理多大的文件呢?如果我有10w,20w条数据要导出(假设有40列或者80列)会不会内存溢出啊?
|
|
返回顶楼 | |
发表时间:2010-06-12
看了下exprotExcel方法,数据多的时候肯定会内存溢出了。有没有什么思路,现在在处理一个大数据量导出,怎么避免内存溢出?我基础不好。谢谢了。
|
|
返回顶楼 | |
发表时间:2010-06-14
对酒当歌,人生几何 写道 看了下exprotExcel方法,数据多的时候肯定会内存溢出了。有没有什么思路,现在在处理一个大数据量导出,怎么避免内存溢出?我基础不好。谢谢了。
做buffer,分批导不就可以了么? |
|
返回顶楼 | |