Java can';使用ApachePOI读取xlsx文件

Java can';使用ApachePOI读取xlsx文件,java,apache-poi,xlsx,Java,Apache Poi,Xlsx,我已经搜索这个问题好几个小时了,但是给出的解决方案不起作用。我在Intellij IDEA 12.0.4中工作,试图读取Microsoft 2007 xlsx文件。我收到的错误是: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookF

我已经搜索这个问题好几个小时了,但是给出的解决方案不起作用。我在Intellij IDEA 12.0.4中工作,试图读取Microsoft 2007 xlsx文件。我收到的错误是:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:91)
    at Main.main(Main.java:157)
Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
代码是:

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import java.util.Iterator;

public class Main {
    public static void main(String[] args) {
        try {

            File file = new File(root_dir + "2013-03-13 iom diff.xlsx");
            Workbook workbook = WorkbookFactory.create(file); //fails here

            //...

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
在IDEA中,我有以下项目设置:

我没有面或工件,IDEA中的平台设置下也没有全局库。在平台设置下,我有以下SDK:

我在Windows 7 SP1 x64上,在
System Properties->Environment Variables
下,我有: 在系统变量->类路径下:

C:\xmlbeans-2.5.0\lib\xbean.jar;C:\xmlbeans-2.5.0\lib\jsr173\u 1.0\u api.jar

在系统变量->路径下:

…;%XMLBEANS\u HOME%\bin;C:\poi-3.9\ooxml-lib\xmlbeans-2.3.0.jar;C:\poi-3.9\ooxml lib\stax-api-1.0.1.jar;C:\poi-3.9\ooxml lib\xmlbeans-2.3.0
其中
xmlbeans\u HOME
在变量下定义为
C:\xmlbeans-2.5.0
表示其他不相关的文件

就Java而言,我还安装了以下组件:

Java 7 Update 17
Java 7 Update 17 (64-bit)
Java SE Development Kit 7 Update 17
Java SE Development Kit 7 Update 17 (64-bit)
明确地说,我的问题是“当我收到此错误时,如何使用ApachePOI加载xlsx文件。”
非常感谢您的帮助。

使用XSSF实现或sxssf实现POI

这里有一个例子

我注意到我没有将excel文件保存为OOXLM xlsx,而是保存为普通xlsx,我认为这是问题的一部分。两者都有相同的分机,所以我想很容易犯这样的错误。我查看了编译器的输出,在最上面列出了它使用的类路径中的JAR。然而,Intellij IDEA 12似乎没有使用系统的类路径,而是使用项目。我已经将目录添加到项目的类路径中(通过转到
项目结构->依赖项->
,然后单击
+
图标添加jar或目录),但是没有调用正确的jar文件(从编译器输出的第一行可以看出)。我在
.idea->libraries
中搜索了项目目录,找到了我在dependency选项卡下添加的目录路径的xml配置文件,这些路径应该包含运行程序所需的jar文件。我打开其中一个xml文件,看到了以下内容:

<component name="libraryTable">
  <library name="poi-3">
    <CLASSES>
      <root url="file://C:/poi-3.9" />
    </CLASSES>
    <JAVADOC>
      <root url="file://C:/poi-3.9/docs/apidocs" />
    </JAVADOC>
    <SOURCES />
    <jarDirectory url="file://C:/poi-3.9" recursive="false" />
  </library>
</component>

这将删除此错误()。我只是想与大家分享一下,以防将来有人使用相同的IDE。

为什么要使用xmlbeans的源代码,而不是编译的jar?我在Path变量下面有这两个源代码。我尝试从path变量中删除源,但仍然有相同的错误。(我关闭并重新打开IDEA以确保)XSSF工作簿=新XSSF工作簿(inputStream);现在它说:线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/xmlbeans/XmlObject
<component name="libraryTable">
  <library name="poi-3">
    <CLASSES>
      <root url="file://C:/poi-3.9" />
    </CLASSES>
    <JAVADOC>
      <root url="file://C:/poi-3.9/docs/apidocs" />
    </JAVADOC>
    <SOURCES />
    <jarDirectory url="file://C:/poi-3.9" recursive="true" />
  </library>
</component>