首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android中使用Apache POI读取excel文件的依赖关系

在Android中使用Apache POI读取excel文件的依赖关系
EN

Stack Overflow用户
提问于 2015-06-02 00:39:20
回答 3查看 7.4K关注 0票数 1

我想使用Apache POI在Android中读写excel文件(包括xlsx和xls)。但是我不能解决我目前所遇到的依赖问题。

如果gradle文件中只有这两个依赖项

代码语言:javascript
复制
compile files('libs/poi-3.12-20150511.jar')
compile files('libs/poi-ooxml-3.12-20150511.jar')

然后我得到以下错误:

代码语言:javascript
复制
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/xmlbeans/XmlOptions;
            at org.apache.poi.POIXMLDocumentPart.(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文件的代码:

代码语言:javascript
复制
if (isXlsxFile)
        myWorkbook = new XSSFWorkbook(OPCPackage.open(file));
    else
        myWorkbook = new HSSFWorkbook(fileStream);
    Sheet mySheet = myWorkbook.getSheetAt(0);
    Iterator rowIterator = mySheet.rowIterator();

似乎我应该添加xmlbeans库。将此依赖项添加到gradle文件后:

代码语言:js
复制
compile files('libs/xmlbeans-2.6.0.jar')

在我添加了这个依赖之后,我在gradle构建过程中得到了以下错误:

代码语言:javascript
复制
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

关于我应该如何处理这个问题,有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-01 18:12:34

我也面临着同样的问题。poi:poi-ooxml在末尾引用stax:stax-api,它包含核心包javax.xml。*。编译器(或predexer或在android studio中的其他名称)会中止编译,并显示一条长警告。有三种方法可以解决这个问题:

  1. 使用poi之外的其他库,如果有也支持xlsx
  2. 重新编译依赖项。我开始重新编译stax-api。您需要使用类似jarjar的工具来更改类的包名,android studio的错误输出中也提到了这一点。问题:您还必须重新编译引用和使用stax-api的xmlbeans库。在这一点上,我放弃了。
  3. 在编译期间设置--core-library开关。不建议这样做,因为可以在androids错误消息中看到。尽管如此,here是关于这是如何工作的讨论。执行此操作时,您还应该重新编译stax-api并删除在android.jar 中定义的所有类。*)

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2018-07-30 04:47:24

这对我很有效:

dependencies { implementation 'org.apache.poi:poi:3.12' implementation 'org.apache.poi:poi-ooxml:3.12' implementation 'com.fasterxml:aalto-xml:1.0.0'}

票数 5
EN

Stack Overflow用户

发布于 2021-02-26 12:01:08

只需在build.gradle模块文件中添加这两个依赖项

代码语言:javascript
复制
implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.2'
implementation 'javax.xml.stream:stax-api:1.0'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30578750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档