????? 最近我一直在做一个小型系统,系统中要用到Excel的导入和导出,再往上看了一下,有两种API 支持java操作Excel对比之下,我选择了功能较强大的POI(因为它支持最新版本的offic 2007,而jxl好像还不行),最新版本是poi 3.8 测试版,这个太新而且功能不稳定,就下载了一个poi3.7 稳定版,用着还不错。先是导入,导入过程中没有出现什么问题,就从Excel表格中导入数据库了;接下来是导出,问题就出现了。
????? 问题一:导出Excel出现中文乱码
????? 由于原项目基本完工,所以不敢随便在原项目上进行改动,就新建了一个项目来测试这个Excel的导出,在新建项目中先是在JSP中能够顺利完成所有功能,然后就吧其功能分担给Action,在移植到Action后就出现了中乱码问题,在网上找了半天也没找到解决办法,网上所说的解决办法都是相对于较早版本的POI而新的POI还没有出现什么解决方法,我测试了数据流程,从前台的JSP---->Action中的geter()和seter()方法------->Action中DAO方法------->数据库------->Action------>输出Excel,发现这个乱码的出现从数据库出来到Action中,之前我的数据库的编码方式是gbk,而Action中默认编码是utf-16,当我把编码方式更改一致后,问题终于解决了。(提示:在POI较早版本中都cell.setEncoding()方法,而高版本中这个方法被去掉了,我估计这个编码方式POI作者也不想去管了。)这个烦人的问题刚解决,第二个问题就接踵而至,当我把在测试项目中Action复制到我所做的项目中时,报错,而且这个错误很奇怪,因为用的POI 3.7,所以这里面的原来是short参数的方法大部分都改成int参数了,而原方法就弃用了,在测试项目中用着好好的row.getCell(int),在本项目中提示必须换成short型参数,看看导入的jar包,原项目和测试项目中是一致的,Action?还是从测试项目中复制的,同样的jar包同样的Action,怎么挪了一个地方就报错??不明白,不理解!!!!
?????? 问题二:Myclipse出现的奇怪问题
?????? 测试再测试,还是不行,总是int类型错误。实在是没办法了,突发奇想,不就是报错吗,我把你的东西都换一下看成不成,反正死马当活马医嘛,备份一下后就大刀阔斧的动手了。
?????? 1.把原项目从myeclipse中删除,包括在其workspace中的,就是删除的时候从workspace中删除(提示:记得先备份,要不如果不成功,你哭都没地儿去);
???????2.新建一个项目,且名字与原项目一致,把原项目中备份中 src文件夹下面的东西全部复制一下粘贴到新建项目的src下,把原项目备份中webRoot中的东西全部复制一下粘贴到新建项目的 webRoot下(注意:WEB-INF文件夹和META-INF文件夹不复制,要不就等于什么也没做),然后把测试项目中的WEB-INF文件夹和META-INF文件夹复制到新建项目中,注意:如果你用到了Struts2 core、hibernate 、spring jar包,就和其他项目一下右键添加就行了;
注:如果你用到了 hibernate反向工程中的findbyproperty(name,value)方法,会报错,因为hibernate自身的jar包冲突了,把antlr-2.7.2.jar删除,保留antlr-2.7.6.jar,因为antlr-2.7.2.jar包在struts2核心包中直接删除是不被允许的,删除方法:找到struts2核心包文件夹,右键点击核心包中任何一个jar包选择“复制”下面一项即“复制限定名”项,所白了就是jar包的存放路径,打开我的电脑,把刚复制的内容粘贴到路径栏,去掉后面那个具体jar包的名字,不然就是打开jar包了,会报错的。找到后复制核心包中除了antlr-2.7.2.jar包以外的所有jar包,粘贴到webRoot---->WEB-INF---->lib下,这样就完成了。
???????? 3.启动myeclipse再看看,这个所谓的新建项目会不会再报错?我的就这样 就没有再报错了,不知道这个问题有没有人遇到过,这是我的一点经验,希望能够帮助那些和我遇到同样问题的童鞋们。
哦,对了我这儿有myeclipse9.0的汉化包,里面包含了汉化过程详解,如果哪位有需要的话 可以自己下载汉化一下,我的英语实在是太烂了,不过常用的编程词汇还是认得的,呵呵,汉化一下能更方便的使用编程工具。