2015-06-01 47 views
0

我想使用Apache POI讀取和寫入Android中的excel文件(包括xlsx和xls)。但我無法解決我目前擁有的依賴關係問題。使用Apache POI讀取Android中的Excel文件的依賴關係

如果我只有在我的gradle這個文件這兩個依賴

compile files('libs/poi-3.12-20150511.jar') 
compile files('libs/poi-ooxml-3.12-20150511.jar') 

然後我得到以下錯誤:

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/xmlbeans/XmlOptions; 
      at org.apache.poi.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:59) 
      at com.gargzdai.spreadsheet.MainActivity.readData(MainActivity.java:131) 
      at com.gargzdai.spreadsheet.MainActivity.prepareForReadingData(MainActivity.java:109) 
      at com.gargzdai.spreadsheet.MainActivity.onCreate(MainActivity.java:68) 
      at android.app.Activity.performCreate(Activity.java:5990) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5254) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 

這是我用來讀取Excel文件的代碼:

if (isXlsxFile) 
     myWorkbook = new XSSFWorkbook(OPCPackage.open(file)); 
    else 
     myWorkbook = new HSSFWorkbook(fileStream); 
    Sheet mySheet = myWorkbook.getSheetAt(0); 
    Iterator rowIterator = mySheet.rowIterator(); 

看來我應該添加xmlbeans庫。之後我這種依賴關係添加到我的gradle這個文件:

compile files('libs/xmlbeans-2.6.0.jar') 

我gradle這個生成過程中添加這種依賴我碰到下面的錯誤後:

Error:Execution failed for task ':app:preDexDebug'. 
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_40\bin\java.exe'' finished with non-zero exit value 1 

任何想法我應該怎麼解決這個問題?

+0

有一點需要注意的是,Java 8並不受Android的支持:https://developer.android.com/sdk/index.html#Requirements http://stackoverflow.com/questions/23318109/is - 可能使用java-8-for-android-development –

+0

感謝您注意到這一點,但它沒有改變任何東西。 – Mantas

+0

有沒有不同版本的poi依賴關係的android?我只是想知道。我現在用\t <! - Excel工作表開始 - > \t \t \t \t \t org.apache.poi \t \t \t POI-OOXML \t \t \t 3.9 \t \t對於java項目和它的工作 – bajrangi

回答

2

我面臨同樣的問題。 org.apache.poi:poi-ooxml在末尾引用了stax:stax-api,它包含核心軟件包javax.xml。*。編譯器(或者預解析器或者在android studio中調用它)會以長時間的警告中止編譯。有三種方法來解決這個問題:

  1. 使用另一個庫比POI,if there is any that also supports xlsx
  2. 重新編譯的依賴關係。我開始重新編譯stax-api。你需要用類似jarjar這樣的工具來更改類的包名,這也在android studio的錯誤輸出中提到。問題:你還必須重新編譯引用和使用stax-api的xmlbeans庫。在這一點上,我放棄了。
  3. 在編譯期間設置--core-library開關。這是不推薦的,因爲人們可以在androids錯誤消息中看到。然而,here是關於如何工作的討論。這樣做,你還應該重新編譯stax-api並刪除所有在android.jar中定義的類(javax.xml.XMLConstants,javax.xml.namespace。*)

希望有幫助!

相關問題