java利用poi读取excel异常问题

最近一个web工程需要完成一个小功能,利用文件上传然后读取文件内容写入到数据库,这里是操作的excel文件,excel文件分两种后缀,03版本的xls和之后的xlsx,现在大家一般都拿非常好用的插件直接过来用就可以了,我这里用的是java poi相关资源包。

1,首先要能够读取带xlsx的excel文件,必须要导入如下的jar包

然后遇到的问题是在本地工程下建立的一个测试类测试没有异常,两种excel的文件都能读取,但是一旦发布到web工程下,我的工程是在tomcat下跑的。这里就出现了问题,总是报这个异常:

Exception in thread "main" org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

然后随着异常仔细的往上看,最后发现说有一个xbean.jar是否是正确的版本,这个时候我就知道可能是jar包冲突了,但是这时候对web工程的结构有点不是很明确了,为什么在测试类下没有问题,但为啥在web下跑的时候会产生这个异常呢,究其原因,这里要弄明白,在web下跑的时候,在webRoot下下面的WEB-INF下面的lib放的jar才是工程跑的时候用用到的jar,所以这时候我去找,果然发现有一个xbean.jar跟java poi的xmlbeans-2.3.0.jar冲突了,果断删掉低版本的xbean.jar,问题解决。

所以从遇到这个问题上来看,首先要学会从异常中找原因,其次知道原因了之后如何去解决。异常往往能够暴露出能够解决问题的关键所在。希望能帮到遇到此类似问题的朋友。

时间: 2024-08-10 02:10:47

java利用poi读取excel异常问题的相关文章

java利用poi读取Excel文件

java读取Excel文件,笔者认为:从结构上来看,Excel文件是由一个一个的单元格组成的,有点像细胞cell,逐行的排列.那么我们读的时候也应该逐行逐行的读,从左到右的寻找每一个cell.一.实例代码: 只是实现了一种方式,因为依照读取内容的不同,读取的后想要的操作不同,因此不能苟同全部,只是方法是相通的.说道Excel文件的结构,这货从数学的角度来说,绝对是一个二维数组,因此我就拿字符串二维数组接受读取后的内容,并每个单元格每个单元格的打印.当然也可以返回三维数组(包含该单元格的位置坐标)

java用POI读取excel时date类型出现的问题

最近用poi读取excel并传入数据库中,但是出现了一个非常奇葩的问题,一直困扰了我很久 就是读取时date类型出现年份和日读取正确,但是月份为00的情况,我冥思苦想了很找了久,一直找不到原因 今天突然发现时自己粗心导致的 之前的错误代码: Date time=new Date(); time=cell.getDateCellValue(); //按指定格式输出 SimpleDateFormat df=new SimpleDateFormat("yyyy/mm/dd hh:mm:ss"

java 利用 poi 生成 Excel文件的例子

在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 1. 生成 Excel 文档. 2. 保护生成Excel文档,设置密码访问. 3. 自动对生成的Excel 文档第一行标题栏设置成filter 过滤形式, 方便用户使用. 用 apache  POI 生成 Excel 文档公用类  程序代码 package com.yihaomen.poi.sampl

JAVA利用jxl读取Excel内容

JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03  xls格式的Excel. 1 import java.io.File; 2 import java.io.FileInputStream; 3 4 import jxl.Cell; 5 import jxl.Sheet; 6 import jxl.Workbook; 7 8 9 public class testxls { 10 /** 11 * 读取xls文件内容 12 * @param file 想要读取

java使用poi读取excel(.xlsx)文件

经过一番搜索发现,java操纵excel文件常用的有jxl和poi两种方式,孰好孰坏看自己需求而定. 其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx 这里介绍的使用poi方式(XSSFWorkbook),实际上poi提供了HSSFWorkbook和XSSFWorkbook两个实现类.区别在于HSSFWorkbook是针对.xls文件,XSSFWorkbook是针对.xslx文件. 首先明确一下基本概念: 先创建一个工作簿,一个工作簿可以有多个工作表,一个工作表可以有多个行,一

JAVA:通过poi读取excel

POI是一个apache开源的jar包,可以通过搜索 java POI找到官网,并下载开发包. 包含的功能: 可以读取excel2003,2007,2010等. 读取excel2007/2010的代码: public static boolean isNumeric(String str) { for (int i = 0; i < str.length(); i++) { if (!Character.isDigit(str.charAt(i))) { return false; } } re

Java利用POI生成Excel强制换行

前一段时间在做一个学校排课系统时,有一个地方需要利用把课程表生成excel汇出给客户,由于之前用excel都只是简单的应用,在单元格里都是用自动换行,而这次可能需要用到手动强制换行. 于是我在网上找了一下,网上找到的文章都是说在excel里的文字里加上/n,/n/r,/r/n之类,反正各种各样的都有,更奇怪的是还有人说在单元格里加上<br> 后来我试过用/r后的效里是生成的文件里,你用打开时,并不会换行,如果你用鼠标在单元格里点一下之后就会自动换行. 后来我琢磨了一下,可以通过如下方式进行, 

Java利用POI生成Excel强制换行(转载)

使用POI创建一个简单的 myXls.xls 文件 常用的包为 org.apache.poi.hssf.usermodel.*; 例子: import java.io.*; import org.apache.poi.hssf.usermodel.*; public class ZoomSheet { public ZoomSheet() { } public static void main(String args[]) throws IOException { HSSFWorkbook wb

Java通过poi读取excel中文件

maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.12</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>po