读取Excel表格报错问题分析总结(用apache POI读取,表格稍微改动就报错导入不进去)
2018-01-02 20:57
330 查看
首先是建立在用apachePOI解析Excel时一定几率是能成功解析导入的,如果一点也不能的话,也可以参考看看我总结的原因,也许也是导致你屡次导入不能的原因之一。
这个问题是前天客户反应的,不用下载的好的模版套进内容再导入的话就报错,怎么也导入不进去,客户即想用从其他直接导出的数据导入我们的产品中用想能自己复制一些其他的内容到自己建立的excel表格中导入进去。今天晚上特意抽出时间来总结一产生这个问题的几个原因。
1、第一个原因就是,我最后发现我们的产品中excel导入这个组件(用apache POI实现)里边出现的问题,进一步跟踪,发现:
[java] view
plain copy
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文档:
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种格式都匹配不上的情况(声明:这块代码不是我写的哦),于是加上:
[java] view
plain copy
<span style="font-size:18px;"> default:strCell="''";</span>
问题才解决了一个原因。
2、第二个原因就是excel表格中日期类型的格式不对,应该选中日期所在列,右击点击菜单里的单元格格式,由常规设置为日期格式。
3、第三个原因就是excel为空的单元格,也要设置一下单元格格式,为字符即可,否则常规格式的空数据excel解析时未能匹配成STRING。
4、第四个原因就是excel表格中删除数据时,尤其是最下边删除时,不是选中删除的内容,而是选中删除的内容所在的行,否则在解析时还是以为有数据呢只不过数据为空而已,这就很容易造成错误。
这个问题是前天客户反应的,不用下载的好的模版套进内容再导入的话就报错,怎么也导入不进去,客户即想用从其他直接导出的数据导入我们的产品中用想能自己复制一些其他的内容到自己建立的excel表格中导入进去。今天晚上特意抽出时间来总结一产生这个问题的几个原因。
1、第一个原因就是,我最后发现我们的产品中excel导入这个组件(用apache POI实现)里边出现的问题,进一步跟踪,发现:
[java] view
plain copy
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.String getStringCellValue()
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种格式都匹配不上的情况(声明:这块代码不是我写的哦),于是加上:
[java] view
plain copy
<span style="font-size:18px;"> default:strCell="''";</span>
问题才解决了一个原因。
2、第二个原因就是excel表格中日期类型的格式不对,应该选中日期所在列,右击点击菜单里的单元格格式,由常规设置为日期格式。
3、第三个原因就是excel为空的单元格,也要设置一下单元格格式,为字符即可,否则常规格式的空数据excel解析时未能匹配成STRING。
4、第四个原因就是excel表格中删除数据时,尤其是最下边删除时,不是选中删除的内容,而是选中删除的内容所在的行,否则在解析时还是以为有数据呢只不过数据为空而已,这就很容易造成错误。
相关文章推荐
- 读取Excel表格报错问题分析总结(用apache POI读取,表格稍微改动就报错导入不进去)
- [导入]关于ASPNET在IIS一些问题的经验总结
- Ado.Net读取Excel常见问题总结
- SQL数据导入导出问题总结
- Ado.Net读取Excel常见问题总结
- 关于dom处理表格的问题 总结 转贴
- JfreeChart使用经验总结(分析了使用中碰到的一些常见问题)
- excel内容导入数据库数据丢失问题的分析几解决方法
- [导入]ASP.NET 状态服务 及 丢失问题解决方案总结
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 东方有线项目分析设计阶段遇到的问题及总结
- 【转载】同事对项目UI问题案例分析培训的总结
- PHP初学者头疼问题总结与分析
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 数据导入导出问题总结
- [导入]转:两个关于.NET读取EXCEL文件的问题
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 常用的分析问题方法的总结
- Ado.Net读取Excel常见问题总结
- 数据导入导出问题总结