关于poi版本差异问题!
前言
最近在工作时需要做一个导入导出的功能,出现了几个问题,记录一下
环境为poi3.+版本到poi4.+的过渡
问题一
poi读取Excel2003版本和2007版本以及更高版本的兼容性问题报错说明:
一开始用的都是.xlsx格式的文件做导入操作,一切都没有问题
后面在做导出功能时引入了一个做导出的工具,这个工具使用的是.xls格式的文件做导出操作的,所以当我使用.xlsx格式的文件去做导出时,就出现了异常报错,如:
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文件的版本做判断。然后我就进行做判断,用的是判断方法是:
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时它会自行判断版本。创建代码如下:
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包
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
借鉴链接
poi版本升级(3.13到4.0.1)的那些坑
POI - 读取Excel2003、Excel2007或更高级的兼容性问题
声明
借鉴部分均注明了原文出处,可在文章的`借鉴链接`处获取原文出处文中若内容有涉及原版权,请邮件联系elvin-chen@qq.com,涉及的相关文章或内容将会及时更改或取消发布