0

我一直在搜索这个问题几个小时,但给出的解决方案没有奏效。我正在使用 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: sdk类路径 sdkannotations sdksrcpath

我在 Windows 7 SP1 x64 下,System Properties -> Environment Variables我有: 在system 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 文件。” 任何帮助深表感谢。

4

2 回答 2

1

使用 POI 的 XSSF 实现或 sxssf 实现。

http://poi.apache.org/spreadsheet/index.html

这是一个示例 http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/ss/examples/BusinessPlan.java

于 2013-03-21T17:03:18.190 回答
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>

然后我改为recursivetrue 所以它读

<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>

这消除了这个错误(但现在我得到一个 nullPointer 异常)。只是想分享一下,以防万一这有助于将来使用相同 IDE 的任何人。

于 2013-03-23T13:47:49.007 回答