读取Excel表格报错问题分析总结(用apache POI读取,表格稍微改动就报错导入不进去)...



首先是建立在用apachePOI解析Excel时一定几率是能成功解析导入的,如果一点也不能的话,也可以参考看看我总结的原因,也许也是导致你屡次导入不能的原因之一。

这个问题是前天客户反应的,不用下载的好的模版套进内容再导入的话就报错,怎么也导入不进去,客户即想用从其他直接导出的数据导入我们的产品中用想能自己复制一些其他的内容到自己建立的excel表格中导入进去。今天晚上特意抽出时间来总结一产生这个问题的几个原因。

1、第一个原因就是,我最后发现我们的产品中excel导入这个组件(用apache POI实现)里边出现的问题,进一步跟踪,发现:

switch (cell.getCellType()) {      
	            case HSSFCell.CELL_TYPE_STRING:      
	                strCell = "'" +cell.getStringCellValue()+ "'";      
	                break;      
	            case HSSFCell.CELL_TYPE_NUMERIC:    
	            	if (HSSFDateUtil.isCellDateFormatted(cell)){
	            		String temp = String.valueOf(sdf.format(cell.getDateCellValue()));
	            		strCell="to_date('"+temp+"','yyyy_mm_dd')";
	            		
	                }else{
	                	strCell = String.valueOf(cell.getNumericCellValue());  
	                	}
	                 break;
                }    

到了这个case匹配时就有错误了,但是就是没抛出异常信息,纳闷了,调试几次都是这样,看了官方的API文档:

getStringCellValue
java.lang.StringgetStringCellValue()
Get the value of the cell as a string

For numeric cells we throw an exception. For blank cells we return an empty string. For formulaCells that are not string Formulas, we throw an exception.

意思是如果单元格不是能解析的字符串格式的话,我们会抛出异常,为空的话就返回一个空字符串。看来不是调用getStringCellValue出的问题,不过一读取到为空的单元格时就出现这个问题。最后发现程序上没有写如果2种格式都匹配不上的情况(声明:这块代码不是我写的哦),于是加上:

<span style="font-size:18px;"> default:strCell="''";</span>

问题才解决了一个原因。

2、第二个原因就是excel表格中日期类型的格式不对,应该选中日期所在列,右击点击菜单里的单元格格式,由常规设置为日期格式。

3、第三个原因就是excel为空的单元格,也要设置一下单元格格式,为字符即可,否则常规格式的空数据excel解析时未能匹配成STRING。

4、第四个原因就是excel表格中删除数据时,尤其是最下边删除时,不是选中删除的内容,而是选中删除的内容所在的行,否则在解析时还是以为有数据呢只不过数据为空而已,这就很容易造成错误。

5、还有两个原因和我们业务数据(数据判重和不为空)要求有关就不再详细说了。

以上原因,仅供大家参考。

转载请注明—作者:Java我人生(陈磊兴)原文出处:http://blog.csdn.net/chenleixing/article/details/43742211


最后,认真看过的网友们,大神们,如有感觉我这个程序猿有哪个地方说的不对或者不妥或者你有很好的议或者建议或点子方法,还望您大恩大德施舍n秒的时间留下你的宝贵文字(留言),以便你,我,还有广大的程序猿们更快地成长与进步.......



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值