首页 > 其他分享 >[转]apache.poi版本3与4的使用差异

[转]apache.poi版本3与4的使用差异

时间:2023-06-12 14:34:32浏览次数:38  
标签:4.1 Excel 单元格 jar 版本 poi apache

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

环境为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博客

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
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:4.1,Excel,单元格,jar,版本,poi,apache
From: https://www.cnblogs.com/dirgo/p/17474941.html

相关文章

  • [转]POI 解析excel报错 java.lang.NoClassDefFoundError: org/apache/poi/ss/usermode
    前几天做了一个excel上传导入功能,为了通用想同步支持xls和xlsx格式。代码编写期并没有报错,所需要的类也都有。可是应用启动完测式功能的时候报了这么一个错Causedby:java.lang.NoClassDefFoundError:org/apache/poi/ss/usermodel/Date1904Support这是为什么呢?我第一感觉是jar......
  • Java:使用poi操作docx的word文档
    packagecom.aomen.java;importorg.apache.poi.openxml4j.exceptions.InvalidFormatException;importorg.apache.poi.util.Units;importorg.apache.poi.xwpf.usermodel.*;importorg.apache.xmlbeans.XmlCursor;importorg.openxmlformats.schemas.wordprocessingml.......
  • k8s查看资源的api版本
    #方法1[root@test-masterdeployment]#kubectlexplaindeploymentKIND:DeploymentVERSION:apps/v1DESCRIPTION:DeploymentenablesdeclarativeupdatesforPodsandReplicaSets.FIELDS:apiVersion <string>APIVersiondefinesthever......
  • 使用SubWCRev命令将SVN版本号自动设置到vs软件版本中
    背景在软件开发过程中,每次对一个软件产品的release,都要处理该软件版本号。有的版本号是人为定的,有些是自动生成的,本文介绍在使用SVN版本管理软件的情况下,利用SVN的SubWCRev命令来自动生成对应svn修改版本的版本号,这样便于快速找到对应二进制的编译时的SVN版本号。操作步骤1.......
  • Luogu P3435 [POI2006] OKR-Periods of Words
    [POI2006]OKR-PeriodsofWords题面翻译对于一个仅含小写字母的字符串\(a\),\(p\)为\(a\)的前缀且\(p\nea\),那么我们称\(p\)为\(a\)的proper前缀。规定字符串\(Q\)(可以是空串)表示\(a\)的周期,当且仅当\(Q\)是\(a\)的proper前缀且\(a\)是\(Q+Q\)的前缀......
  • Win7使用最新的node.js(版本18.16.0)
    截至本文的发布时间2023.06.11,前端开发基础工具node.js的最新版本是18.16.0LTS可能有人要问,为什么要研究node.js在Win7系统下的兼容情况呢?你直接用Win10不就行了?如果你可以直接使用Win10,显然你不是这篇文章的推荐阅读对象,因为某些开发环境比较特殊,只能使用Win7而不允许使用Win......
  • apache安装证书参考流程
    1,申请好证书96net.com.cn.pem96net.com.cn.key2,若无/etc/httpd/ssl目录,可通过mkdir/etc/httpd/ssl命令行创建。3,首次安装的Apache服务器,conf.d、conf、conf.modules.d等目录默认在/etc/httpd目录下。4,在/etc/httpd/conf目录下的httpd.conf配置文件找到Include......
  • Apache Kafka监控之KafkaOffsetMonitor
    当你将Kafka集群部署之后,你可能需要知道当前消息队列的增长以及消费情况,这时候你就得需要监控它。今天我这里推荐两款Kafka开源的监控系统:KafkaOffsetMonitor和KafkaWebConsole。 KafkaOffsetMonitor是用来实时监控Kafka集群的consumers以及它们在partition中的offset(偏移量)......
  • linux 内核版本
    截止支持时间CentOSversion  Releasedate  Fullupdates[40][41]  Maintenanceupdates[40][41]3  2004-03-19  2006-07-20  2010-10-31[42]4  2005-03-09  2009-03-31  2012-02-29[42][43]5  2007-04-12  2014-01-31  2017-03-3......
  • axis2 maven报错Could not find artifact org.apache.axis2:axis2:jar:1.7.9
    Couldnotfindartifactorg.apache.axis2:axis2:jar:1.8.2inaliyunmaven(https://maven.aliyun.com/repository/public/)一开始以为是镜像的问题,但是换成中央仓库也没用https://repo.maven.apache.org/maven2/org/apache/axis2/axis2/1.7.9/实际上,这个目录里确实没有j......