2013-03-21 160 views
0

我一直在搜索這個問題幾個小時,但所提供的解決方案無法正常工作。我正在使用Intellij IDEA 12.0.4嘗試讀取Microsoft 2007 xlsx文件。我收到的錯誤是:使用apache poi無法讀取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,我有以下項目設置:

modsource projdepen projpath projlib projstruct

我沒有Facets或Artifacts,並在IDEA平臺設置下我沒有全局庫。在平臺設置,我有以下的SDK: sdkclasspath sdkannotations sdksrcpath

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

爲什麼你使用xmlbeans的源代替編譯的jar? – 2013-03-21 16:21:58

+0

我在Path變量下都有。我嘗試從路徑變量中移除源,但仍然有相同的錯誤。 (我關閉並重新打開IDEA以確保) – thed0ctor 2013-03-21 16:30:46

+0

XSSFWorkbook workBook = new XSSFWorkbook(inputStream); – swamy 2013-03-22 06:09:23

回答

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。

相關問題