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



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

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

第一个原因就是,我最后发现我们的产品中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.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种格式都匹配不上的情况(声明:这块代码不是我写的哦),于是加上:

 default:strCell="''";

问题才解决了一个原因。

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

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

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

还有2个原因和我们业务数据要求有关就不在这说了。

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

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

最后,认真看过的网友们,大神们,如有感觉我这个程序猿有哪个地方说的不对或者不妥或者你有很好的

议或者建议或点子方法,还望您大恩大德施舍n秒的时间留下你的宝贵文字(留言),以便你,我,还有广大的程序猿们更快地成长与进步.......

时间: 2024-10-12 14:32:25

读取Excel表格报错问题总结(用apache POI读取,表格稍微改动就报错导入不进去)的相关文章

使用Apache POI 读取Excel文件

生活中用到用到Excel文件的情况很多,什么商品进货单,产品维修单,餐厅的营业额等等.作为程序员,我们该如何读取Excel文件,获取我们想要的资源呢.本篇将讲解如何使用Apache POI读取Excel文件. 准备工作: 1)Apache POI 开发jar包 2)Excel资源文件,包括Excel2003,Excel2007这两种版本分别对应xls.xlsx文件. 本篇已经为您做好准备工作,请点击此处,下载资源文件,你也可以浏览Apace POI官网了解更多详细信息. 简要流程: 获取Work

Matlab 读取excel文件提示服务器出现意外情况或无法读取问题解决

1.问题描述: 该错误通常发生在应用函数读取excel文件(后缀xls或xlsx)时. 应用xlsread函数读取提示服务器出现意外情况: 应用importdata读取时提示can‘t open file: 其他格式如txt文档则可以正常读取. 2.问题解决 该问题与Matlab无关,为Excel端出现了问题.解决方案如下: 步骤:Excel选项——加载项——Com加载项 :去掉VisualStudion相关勾选. 去掉勾选的时候还可能出现“无法更改 中注册的office 加载项的连接状态”的提

apache poi读取excel(03版本之前)

一:首先导入如下三个poi包: 上述三个包下载地址:http://download.csdn.net/detail/wangzihu/8420333 二:示例代码 package com.lenovo.storage.web.util; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; impo

用apache poi读取excel数字是科学计数法的问题

昨天老大给了我一个excel文件叫我把里面的内容用短信发出去(文件里面就2个字段,手机号码和内容),然后我就写了一个方法用apache里面的poi读取,发现读取的手机号码是科学计数法,经过了解发现无论数字是否小数,使用cell.getNumbericCellValue() 去获取值的时候,会得到一个double,而且当长度大一点的时候会变成科学计数法形式.那么获取这个单元格的原始的数据,就其实是一个double怎么转换成整数的问题了. 我们就可以用DecimalFormat对这个double转换

Apache POI读取和创建Excel ----01(简单操作)

public class ExcelCreatAndRead { /**     * 使用Apache POI创建Excel文档     * */    public static void createXL(){        /**Excel文件要存放的位置,假定在D盘下*/        String outputFile="D:\\test.xlsx";        try {        //创建新的Excel工作薄        XSSFWorkbook workboo

java使用org.apache.poi读取与保存EXCEL文件

---恢复内容开始--- 一.读EXCEL文件 1 package com.ruijie.wis.cloud.utils; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.text.DecimalFormat; 8 import java.util

用 Apache POI 读取 XLSX 数据

最近因为项目的原因,需要从一些 Microsoft Office Excel 文件读取数据并加载到数据库. Google了一下方法,发现其实可以用的 Java 第三方库很多,最著名的是 Apache 的 POI 开源项目,其官网地址是 https://poi.apache.org 从首页的简介中我发现这个项目功能非常强大,不仅能处理 Excel,它还可以处理 Word.PowerPoint.Outlook.Visio,基本上囊括了 MS Office 的全部常用组件.目前 POI 更新到了 3.

JAVA EXCEL 导入jar报错The package org.apache.poi.hssf.usermodel is accessible from more than one module: poi, poi.examples, poi.scratchpad

意思是org.apache.poi.hssf.usermodel包可以来自这三个jar里面.重复了.需要去掉重复的. 我选择把poi.examples, poi.scratchpad jar包链接去掉. 原文地址:https://www.cnblogs.com/xuqiulin/p/9180808.html

读取Excel二进制写入DB,并从DB中读取生成Excel文件

namespace SendMailSMSService { class Program { static void Main(string[] args) { var connString = SqlDataHelper.GetConnectionString<FileContent>(); //读取Excle文件并写入表中 var bytes = File.ReadAllBytes("a.xlsx"); var entity = new FileContent { Fi