【问题标题】:Dependencies for using Apache POI to read excel files in AndroidAndroid中使用Apache POI读取excel文件的依赖
【发布时间】:2015-06-01 16:39:19
【问题描述】:

我想使用 Apache POI 在 Android 中读取和写入 excel 文件(xlsx 和 xls)。但我无法解决我目前遇到的依赖问题。

如果我的 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

关于我应该如何解决这个问题的任何想法?

【问题讨论】:

标签: java android excel apache


【解决方案1】:

这对我有用:dependencies { implementation 'org.apache.poi:poi:3.12' implementation 'org.apache.poi:poi-ooxml:3.12' implementation 'com.fasterxml:aalto-xml:1.0.0'}

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。 org.apache.poi:poi-ooxml 在末尾引用 stax:stax-api,其中包含核心包 javax.xml.*。编译器(或 predexer 或在 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.*) 中定义的所有类

    希望有帮助!

    【讨论】:

      【解决方案3】:

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

      implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.2'
      implementation 'javax.xml.stream:stax-api:1.0'
      

      【讨论】:

        【解决方案4】:

        您需要记住在保存后同步 gradle 文件。这为我解决了这个问题。进行更改后,同步按钮出现在 gradle 文件的顶部。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多