我一直在搜索这个问题好几个小时但是给出的解决方案没有用。我正在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中,我有以下项目设置:
我没有Facets或Artifacts,在IDEA的平台设置下,我没有全局库。在平台设置下,我有以下SDK:
我使用的是Windows 7 SP1 x64,System Properties -> Environment Variables
下我有:
在系统变量 - > CLASSPATH :
C:\xmlbeans-2.5.0\lib\xbean.jar;C:\xmlbeans-2.5.0\lib\jsr173_1.0_api.jar
在系统变量 - >路径:
下 ...;%XMLBEANS_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_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)
显然我的问题是“当我收到此错误时,如何使用apache POI加载xlsx文件。” 非常感谢任何帮助。
答案 0 :(得分:1)
使用POI的XSSF实现或sxssf实现。
答案 1 :(得分:0)
我注意到我没有将excel文件保存为OOXLM xlsx,而是保存为正常的xlsx,我认为这是问题的一部分。两者都具有相同的扩展名,所以我认为很容易犯这个错误。我查看了编译器的输出,并在最顶层列出了它正在使用的类路径中的jar。但是,似乎Intellij IDEA 12不使用系统的类路径,而是使用项目。我已将目录添加到项目的类路径中(通过转到Project Structure->Dependencies->
然后单击+
图标添加jar或目录)但是没有调用正确的jar文件(我可以告诉)从编译器的第一行输出)。我搜索了.idea->libraries
中的项目目录,发现了我在依赖选项卡下添加的目录路径的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>
然后我将recursive
更改为true,以便阅读
<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>
这删除了此错误(but now I'm getting a nullPointer exception)。只是想分享,以防将来使用同一个IDE的任何人。