在Java中,使用POI来进行excel的读取和解析是常用的一种做法;在office的excel中存在2007,2003两种不同的格式,通常情况下是以xls/xlsx的不同后缀来区分的,但用户可能不知道这个区别,所以会出现格式无法兼容的异常
1. POI
POI源自Apache基金会,是其顶级域名项目, POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
2. Excel 2003和2007之区别
微软针对Excel在2007版本之后的实现中使用了ooxml的格式来描述内容信息,和之前2003版本的excel在实现上有所区别,故在POI中提供了一个新的类来兼容2007版的excel的读取和创建过程。
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HSSF,XSSF的功能列表对比
3. 问题描述
在上传excel文件中,解析excel文件,并解析中出现了如下错误信息:
Apr 13, 2015 1:29:08 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/bsettle] threw exception [Request processing failed; nested exception is org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]] with root cause
org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]
at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:203)
at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:673)