[转]apache.poi版本3与4的使用差异
最近在工作时需要做一个导入导出的功能,出现了几个问题,记录一下
环境为poi3.+版本到poi4.+的过渡
问题一poi读取Excel2003版本和2007版本以及更高版本的兼容性问题报错说明:一开始用的都是.xlsx格式的文件做导入操作,一切都没有问题。后面在做导出功能时引入了一个做导出的工具,这个工具使用的是.xls格式的文件做导出操作的,所以当我使用.xlsx格式的文件去做导出时,就出现了异常报错,如:
JAVA1The 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文件的版本做判断。然后我就进行做判断,用的是判断方法是:
JAVA1POIFSFileSystem.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时它会自行判断版本。创建代码如下:
JAVA1Workbook 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包
JAVA1java.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博客
POI - 读取Excel2003、Excel2007或更高级的兼容性问题_the supplied data appears to be a raw xml file. fo_it_wangxiangpan的博客-CSDN博客
作者: Elvin链接: http://www.gocit.cn/posts/4.html来源: Elvin著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。