[转]apache.poi版本3与4的使用差异
最近在工作时需要做一个导入导出的功能,出现了几个问题,记录一下
环境为poi3.+版本到poi4.+的过渡
问题一
poi读取Excel2003版本和2007版本以及更高版本的兼容性问题
报错说明:
一开始用的都是.xlsx格式的文件做导入操作,一切都没有问题。后面在做导出功能时引入了一个做导出的工具,这个工具使用的是.xls格式的文件做导出操作的,所以当我使用.xlsx格式的文件去做导出时,就出现了异常报错,如:
JAVA
1
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)
提示了一个版本问题,原因是不同格式的Excel文件需要使用不同的处理对象(XSSF/HSSF)进行文件读取;
解决方法
使用POIFSFileSystem.hasPOIFSHeader(inputstream)方法对Excel文件的版本进行判断,由此可以知道到底是需要用XSSFWorkbook对象还是需要用HSSFWorkbook对象来读取文件。
问题二
版本更新的差异问题
问题说明:
开始时是用的3.17版本的poi的jar包,也没有对excel文件的版本做判断。然后我就进行做判断,用的是判断方法是:
JAVA
1
POIFSFileSystem.hasPOIFSHeader(inputstream)
这个方法可以正确判断Excel是2003还是2007的版本,但是后面我更换了其中一个jar包的版本poi-4.1.2,更新后出现了hasPOIFSHeader方法无法找到的错误,原因是poi-4.0+的版本去掉了hasPOIFSHeader这个判断方法。
解决方法
使用poi-ooxml包中的WorkbookFactory.create(inputStream)方法来创建Workbook对象可以很好解决这个问题;这是因为HSSFWorkbook和XSSFWorkbook都实现了Workbook接口,创建Workbook时它会自行判断版本。创建代码如下:
JAVA
1
Workbook wb = WorkbookFactory.create(is);
还有就是更新后原本的对单元格数据类型判断和excel样式代码的新变化
poi3.+版本 poi4.+版本 用途
Cell.CELL_TYPE_STRING CellType.STRING 单元格数据格式判断
HSSFCell.CELL_TYPE_NUMERIC CellType.NUMERIC 单元格数据格式判断
CellStyle.ALIGN_CENTER HorizontalAlignment.CENTER 单元格水平居中
CellStyle.VERTICAL_CENTER VerticalAlignment.CENTER 单元格垂直居中
HSSFColor.GREY_25_PERCENT.index IndexedColors.GREY_25_PERCENT.index 设置图案颜色
CellStyle.SOLID_FOREGROUND FillPatternType.SOLID_FOREGROUND 设置图案样式
CellStyle.BORDER_THIN BorderStyle.THIN 边框
ClientAnchor.MOVE_DONT_RESIZE ClientAnchor.AnchorType.MOVE_DONT_RESIZE.value 单元格插入图片
更具体的请看poi版本升级(3.13到4.0.1)的那些坑
问题三
读取Excel时报500错误
问题说明:
读取Excel时报500错误:这里提示的错误是提示缺少org/apache/commons/compress的jar包
JAVA
1
java.lang.NoClassDefFoundError: org/apache/commons/compress/archivers/zip/ZipFile
报错原因是因为缺少jar包,版本的更新导致需要新的jar包进行配合,并且所有的poi的jar包版本一定要相同
解决方法
加入缺少的jar包即可
注:使用poi做导入导出时,需要加入如下几个jar包配合食用
commons-math3-3.6.1.jar
commons-compress-1.18.jar
poi-4.1.2.jar
poi-ooxml-4.1.2.jar
poi-ooxml-schemas-4.1.2.jar
poi-examples-4.1.2.jar
poi-excelant-4.1.2.jar
poi-scratchpad-4.1.2.jar
这里只是一部分jar包,如果还需要什么jar包但是项目里没有的,下载jar包加入到项目即可
借鉴链接
poi版本升级(3.13到4.0.1)的那些坑_poi3升级到4.0兼容改造工作_峻9527的博客-CSDN博客
作者: Elvin
链接: http://www.gocit.cn/posts/4.html
来源: Elvin
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。