使用Apache POI创建.xlsx文件时的java.lang.NoClassDefFoundError

时间:2014-02-19 06:20:40

标签: java android excel apache-poi

我正在尝试使用Apache POI创建.xlsx文件。这是我的代码:

FileOutputStream outputStream1=null;
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("data");

try {
    target.createNewFile();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
try {
    outputStream1 = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath()+"/file_A/"+"test_Ab"+".xlsx");
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

for(int i=0;i<iteration;i++)
{
    XSSFRow row = sheet.createRow(i);
    Cell cell = row.createCell(0);
    cell.setCellValue("dsfasdf");
}

try {

    FileOutputStream out = new FileOutputStream(target);
    workbook.write(out);
    out.close();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

运行代码时出现以下异常:

02-19 11:48:13.387: E/AndroidRuntime(18736): FATAL EXCEPTION: main
02-19 11:48:13.387: E/AndroidRuntime(18736): java.lang.NoClassDefFoundError: org.apache.poi.xssf.usermodel.XSSFWorkbook
02-19 11:48:13.387: E/AndroidRuntime(18736):    at com.example.filegenerator.MainActivity$2.onClick(MainActivity.java:248)
02-19 11:48:13.387: E/AndroidRuntime(18736):    at android.view.View.performClick(View.java:4101)
02-19 11:48:13.387: E/AndroidRuntime(18736):    at android.view.View$PerformClick.run(View.java:17088)
02-19 11:48:13.387: E/AndroidRuntime(18736):    at android.os.Handler.handleCallback(Handler.java:615)
02-19 11:48:13.387: E/AndroidRuntime(18736):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-19 11:48:13.387: E/AndroidRuntime(18736):    at android.os.Looper.loop(Looper.java:153) 
02-19 11:48:13.387: E/AndroidRuntime(18736):    at android.app.ActivityThread.main(ActivityThread.java:5096)
02-19 11:48:13.387: E/AndroidRuntime(18736):    at java.lang.reflect.Method.invokeNative(Native Method)
02-19 11:48:13.387: E/AndroidRuntime(18736):    at java.lang.reflect.Method.invoke(Method.java:511)
02-19 11:48:13.387: E/AndroidRuntime(18736):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
02-19 11:48:13.387: E/AndroidRuntime(18736):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
02-19 11:48:13.387: E/AndroidRuntime(18736):    at   dalvik.system.NativeStart.main(Native Method)

我正在使用 poi-3.7.jar 。这有什么问题?

5 个答案:

答案 0 :(得分:2)

详细说明Apache POI components page,要使用像XSSF这样的OOXML代码,您需要在类路径中同时使用poipoi-ooxml个jar,以及它们的依赖项。

最新版本的Apache POI,写作时为3.10。我建议您下载二进制发布包,在那里您将找到所有POI jar及其所有依赖项。 components page将帮助您找到您需要的东西,但是对于使用XSSF,简短的答案是您基本上需要所有这些!

答案 1 :(得分:0)

您需要下载poi-ooxml-3.9.jar

答案 2 :(得分:0)

NoClassDefFoundError的原因是:异常中指定的类的定义需要执行代码,但在指定的包下找不到。

根本原因:通常会发现包含该类定义的jar文件已被添加,或者未添加到构建路径中。

您可以为各种版本here

下载apache POI广告罐

答案 3 :(得分:0)

我也认为你不会将poi-3.7.jar导入到你的项目中!首先,你应该创建一个文件夹lib,然后将jar包文件复制到这个lib,然后切换到构建路径,你可以google它。

答案 4 :(得分:0)

就我而言,只有当您的应用包含这些库时,它才有效:

compile files('libs/dom4j-1.6.1.jar')
compile files('libs/stax-api-1.0.1.jar')
compile files('libs/xmlbeans-2.6.0.jar')
compile files('libs/poi-3.10.1-20140818.jar')
compile files('libs/poi-ooxml-3.10.1-20140818.jar')
compile files('libs/poi-ooxml-schemas-3.10.1-20140818.jar')

您可以在这里下载here,全部放在'poi-bin-3.10.1-20140818.zip'档案中。

请不要尝试安装新版本,它不会起作用(至少对Android而言),只有3.10.1及更低版本。