`
zean
  • 浏览: 18901 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

java利用jacob导入word表格

阅读更多

      因为项目的需要,做了一个导入word的模块,大致思路如下,利用jacob来解析word,首先定义一个xml文件,用于描述单元格的位置、对应的属性以及数据校验规则等等,一般来说当表格的内容发生变化或者规则变化时只需要修改配置文件就可以了。
做完后,测试了很多次,觉得各种问题都考虑全面了,将错误提示也做得比较完整,但是上线后还是遇到了各种各样的问题。在部署的一天,总是导入不成功,jacob提示的错误也相当有限,根本找不出有价值的信息。第二天有个同事说测试服务器装的word为2000,版本问题?后来装了2003,好了,果然是word版本问题。
到了正式上线后,又出现了各种各样的问题,当然大多都是用户提交的文档不符合规范造成,大致有如下情况:
1 要求填写数字的地方填写了带圈圈的数字(跌倒!这难道也是数字?),甚至有个人直接在里面打了个“对勾”,硬是半天没弄懂他的用意。
2 填写数字的地方还画蛇添足的加了个单位,如“人”。
3 以前要求填数字的地方,现在要求可以填英文。
4 单位名称居然有超过30个汉字的。
5 很多人都填写了重复的信息。
6 用全角输入的字符,如字母、数字、空格等等。
7 最头疼的是word里面有不可见的字符,记得有一项的最大长度限制在20,用肉眼看那个word里面的长度为13,但程序总是报超过长度,真是汗了半天,后来把字符删除得只剩下3个后再导入,发现在系统里面出现了"?",所以“眼见为实”是不是得改了,眼见不一定为实^o^.
我的解决办法如下:
1 带圈的数字和阿拉伯数字的asc码相差一个固定数,通过判断asc码进行转换,对于要求填数字的地方填写了其它字符的一律用正则表达式过滤掉。
2 数据类型变化的和长度变化的修改配置文件即可。
3 对于某些重复信息,(如一个单位有可能有重名的,出现相同的名字,到底是重复还是重名?这不是程序判断得了的),只能手工清除了。
4 全角也可以通过asc码进行转换。
5 不可见字符,这是一个Latin字符中不可见的东东,通过程序解析发现asc码为160,在家里测试了一下,通过asc码转换可以自动过滤掉,只可惜导入word的工作已经进行了一半了,用武之地已不多。

 

分享到:
评论
4 楼 kimmking 2009-02-21  
请在word模板中控制好 录入格式

我们也这么用,没什么问题。
3 楼 kjj 2009-02-21  
jacob 问题太多了,而且实现方式不好,真的需要这些功能,还不如直接用。net ,何必吊死在java这棵树上呢,java也不是万能的!
2 楼 zean 2009-02-21  
如果附件可以满足需求,谁会那么傻还去解析文件~
1 楼 goodfifa08 2009-02-21  
word直接作为上传附件就行了,干嘛还要导入数据表中,word格式的不确定性太强了。

相关推荐

Global site tag (gtag.js) - Google Analytics