Java 使用XSSFWorkbook创建xlsx文件,但使用方法createSheet(“String”)时出错
我已经尝试在参考库中包含所有需要的JAR。 在这个论坛上也有类似的问题,我已经经历了所有,但无法解决这个问题 我的代码片段:Java 使用XSSFWorkbook创建xlsx文件,但使用方法createSheet(“String”)时出错,java,apache-poi,xssf,Java,Apache Poi,Xssf,我已经尝试在参考库中包含所有需要的JAR。 在这个论坛上也有类似的问题,我已经经历了所有,但无法解决这个问题 我的代码片段: Workbook workbook = new XSSFWorkbook(); CreationHelper createHelper = workbook.getCreationHelper(); Sheet sheet = workbook.createSheet("Gene"); Font headerFont = w
Workbook workbook = new XSSFWorkbook();
CreationHelper createHelper = workbook.getCreationHelper();
Sheet sheet = workbook.createSheet("Gene");
Font headerFont = workbook.createFont();
我遇到以下错误:
异常堆栈跟踪:
org.apache.poi.ooxml.POIXMLException: org.apache.poi.ooxml.POIXMLException: java.lang.reflect.InvocationTargetException
at org.apache.poi.ooxml.POIXMLDocumentPart.createRelationship(POIXMLDocumentPart.java:602)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.createSheet(XSSFWorkbook.java:896)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.createSheet(XSSFWorkbook.java:807)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.createSheet(XSSFWorkbook.java:122)
at DomParser.main(DomParser.java:18)
Caused by: org.apache.poi.ooxml.POIXMLException: java.lang.reflect.InvocationTargetException
at org.apache.poi.ooxml.POIXMLFactory.newDocumentPart(POIXMLFactory.java:111)
at org.apache.poi.ooxml.POIXMLDocumentPart.createRelationship(POIXMLDocumentPart.java:587)
... 4 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:56)
at org.apache.poi.ooxml.POIXMLFactory.newDocumentPart(POIXMLFactory.java:109)
... 5 more
Caused by: java.lang.NoSuchMethodError: org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTWorksheetImpl.generatedSetterHelperImpl(Lorg/apache/xmlbeans/XmlObject;Ljavax/xml/namespace/QName;IS)Lorg/apache/xmlbeans/XmlObject;
at org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTWorksheetImpl.setColsArray(Unknown Source)
at org.apache.poi.xssf.usermodel.helpers.ColumnHelper.cleanColumns(ColumnHelper.java:66)
at org.apache.poi.xssf.usermodel.helpers.ColumnHelper.<init>(ColumnHelper.java:46)
at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentCreate(XSSFSheet.java:259)
at org.apache.poi.xssf.usermodel.XSSFSheet.<init>(XSSFSheet.java:187)
... 11 more
org.apache.poi.ooxml.poixmleexception:org.apache.poi.ooxml.poixmleexception:java.lang.reflect.InvocationTargetException
在org.apache.poi.ooxml.POIXMLDocumentPart.createRelationship(POIXMLDocumentPart.java:602)上
位于org.apache.poi.xssf.usermodel.XSSFWorkbook.createSheet(XSSFWorkbook.java:896)
位于org.apache.poi.xssf.usermodel.XSSFWorkbook.createSheet(XSSFWorkbook.java:807)
位于org.apache.poi.xssf.usermodel.XSSFWorkbook.createSheet(XSSFWorkbook.java:122)
位于DomParser.main(DomParser.java:18)
原因:org.apache.poi.ooxml.POIXMLException:java.lang.reflect.InvocationTargetException
位于org.apache.poi.ooxml.poimmlfactory.newDocumentPart(poimmlfactory.java:111)
在org.apache.poi.ooxml.poimmldocumentpart.createRelationship(poimmldocumentpart.java:587)
... 4更多
原因:java.lang.reflect.InvocationTargetException
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:56)
位于org.apache.poi.ooxml.poimmlfactory.newDocumentPart(poimmlfactory.java:109)
... 还有5个
原因:java.lang.NoSuchMethodError:org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTWorksheetImpl.generatedSetterHelperImpl(Lorg/apache/xmlbeans/XmlObject;Ljavax/xml/namespace/QName;IS)Lorg/apache/xmlbeans/XmlObject;
位于org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTWorksheetImpl.setColsArray(未知源)
位于org.apache.poi.xssf.usermodel.helpers.ColumnHelper.cleanColumns(ColumnHelper.java:66)
位于org.apache.poi.xssf.usermodel.helpers.ColumnHelper.(ColumnHelper.java:46)
位于org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentCreate(XSSFSheet.java:259)
位于org.apache.poi.xssf.usermodel.XSSFSheet.(XSSFSheet.java:187)
... 还有11个
您需要使用xmlbeans-3.0.1
而不是xmlbeans-5.1.3
从错误开始,即:
Caused by: java.lang.NoSuchMethodError: org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTWorksheetImpl.generatedSetterHelperImpl(Lorg/apache/xmlbeans/XmlObject;Ljavax/xml/namespace/QName;IS)Lorg/apache/xmlbeans/XmlObject;
我在Maven中央存储库中搜索包含类CTWorksheetImpl
的JAR:
答案是poi-ooxml模式
,您已经有了它,它的版本与poi
相同。看起来还可以。然后我认为这必须是方法本身。参数来自org.apache.xmlbeans
包,因此xmlbeans
版本可能是错误的
如何找到正确的版本
您可能希望尝试进行依赖关系管理,而不是手动收集jar文件。在Maven项目中,只要说您想要POIooXML
,就足够了。这将自动以递归方式引入所有依赖项,并提供正确的版本
这是一个示例Mavenpom.xml
文件,您可以使用您的项目:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>poi-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
4.0.0
com.example
这是完整的堆栈跟踪吗?我用更少的罐子做类似的东西,对我来说效果很好。请尝试使用xmlbeans-3.0.1
而不是xmlbeans-5.1.3
,并告诉我们它是否有帮助。是的,这就是完整的stacktrace。为了避免错误,我添加了额外的jar,但是运气不好,我只是想知道我所有的jar是否兼容。谢谢Cos64。成功了。我不得不删除xmlbeans-5.1.3,改用xmlbeans-3.0.1。你能详细说明一下是什么问题吗?再次感谢您不是官方的xmlbeans jar,它似乎是2008年制造的xmlbeans的副本。感谢您的解释。