Java 使用XSSFWorkbook创建xlsx文件,但使用方法createSheet(“String”)时出错

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

我已经尝试在参考库中包含所有需要的JAR。 在这个论坛上也有类似的问题,我已经经历了所有,但无法解决这个问题

我的代码片段:

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
,就足够了。这将自动以递归方式引入所有依赖项,并提供正确的版本

这是一个示例Maven
pom.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的副本。感谢您的解释。