使用Apache POI读取Android中的Excel文件的依赖关系

我想使用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

任何想法我应该怎么解决这个问题?

回答:

我面临同样的问题。 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。*)

希望有帮助!

以上是 使用Apache POI读取Android中的Excel文件的依赖关系 的全部内容, 来源链接: utcz.com/qa/260041.html

回到顶部