关于poi版本差异问题!

封面

原文链接:关于poi版本差异问题! | Elvin

最近在工作时需要做一个导入导出的功能,出现了几个问题,记录一下

环境为poi3.+版本到poi4.+的过渡



问题一

poi读取Excel2003版本和2007版本以及更高版本的兼容性问题

报错说明:

一开始用的都是.xlsx格式的文件做导入操作,一切都没有问题。后面在做导出功能时引入了一个做导出的工具,这个工具使用的是.xls格式的文件做导出操作的,所以当我使用.xlsx格式的文件去做导出时,就出现了异常报错,如:

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文件的版本做判断。然后我就进行做判断,用的是判断方法是:

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时它会自行判断版本。创建代码如下:

Workbook wb = WorkbookFactory.create(is);

还有就是更新后原本的对单元格数据类型判断和excel样式代码的新变化

poi3.+版本poi4.+版本用途
Cell.CELL_TYPE_STRINGCellType.STRING单元格数据格式判断
HSSFCell.CELL_TYPE_NUMERICCellType.NUMERIC单元格数据格式判断
CellStyle.ALIGN_CENTERHorizontalAlignment.CENTER单元格水平居中
CellStyle.VERTICAL_CENTERVerticalAlignment.CENTER单元格垂直居中
HSSFColor.GREY_25_PERCENT.indexIndexedColors.GREY_25_PERCENT.index设置图案颜色
CellStyle.SOLID_FOREGROUNDFillPatternType.SOLID_FOREGROUND设置图案样式
CellStyle.BORDER_THINBorderStyle.THIN边框
ClientAnchor.MOVE_DONT_RESIZEClientAnchor.AnchorType.MOVE_DONT_RESIZE.value单元格插入图片

更具体的请看poi版本升级(3.13到4.0.1)的那些坑



问题三

读取Excel时报500错误

问题说明:

读取Excel时报500错误:这里提示的错误是提示缺少org/apache/commons/compress的jar包

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)的那些坑

POI - 读取Excel2003、Excel2007或更高级的兼容性问题


更多知识持续更新中!!!


声明

借鉴部分均注明了原文出处,可在文章的借鉴链接处获取原文出处

文中若内容有涉及原版权,请邮件联系elvin-chen@qq.com,涉及的相关文章或内容将会及时更改或取消发布

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
POI是一款用于处理Microsoft Office格式文件的Java库。其中包括了XLS格式的文件。尽管POI可以轻松地将XLS文件转换为HTML文件,但在这个转换过程中,一些样式可能会丢失。 这种样式丢失的原因可以归结为POI库的限制。尽管POI能够将XLS文件的内容转换为HTML,但它无法完美地将XLS文件中的所有样式转换为HTML样式。这是因为XLS和HTML的样式系统不完全一致。 XLS文件中的样式通常包括文字颜色、背景颜色、字体大小和类型、粗体和斜体等。然而,HTML样式表使用一种不同的颜色编码方式,并且具有更丰富的样式选项。因此,在转换过程中,POI可能无法准确地将XLS样式映射到HTML样式。 另一个可能导致样式丢失的原因是POI版本问题。尽管POI库在不断地发展和改进,但仍然存在一些版本之间的差异。因此,在使用POI进行XLS到HTML转换时,确保使用最新的POI版本,以确保获得更好的转换结果。 为了解决这个问题,您可以尝试使用其他工具来转换XLS文件到HTML,如Apache FOP或JExcel。这些工具可能具有更好的样式转换能力,可以更好地保留XLS文件的样式。您还可以手动编写代码,使用POI库提供的样式选项,将适当的样式应用到转换后的HTML文件中。 总之,POI库可以帮助我们轻松地处理XLS文件,但在将其转换为HTML时,可能会遇到样式丢失的问题。了解POI的限制,并尝试使用其他工具或进行手动处理,可以帮助我们更好地解决这个问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值