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

标签 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。这里有什么问题?

最佳答案

详见 Apache POI components page , 要使用 XSSF 之类的 OOXML 代码,您需要类路径中的 poipoi-ooxml jar,以及它们的依赖项。

截至撰写本文时,Apache POI 的最新版本是 3.10。我建议你去下载二进制发布包,在那里你会找到所有的 POI jar,以及它们的所有依赖项。 components page将帮助您确定您需要哪些,但对于使用 XSSF,简短的回答是您基本上需要所有这些!

关于使用 Apache POI 创建 .xlsx 文件时出现 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21872636/

相关文章:

java - 如何在 IntelliJ 12 中为 Find Usages 设置默认范围?

vba - Excel VBA重复更改控制单元占用内存

excel - 添加行时自动更改函数范围

java - 有人可以解释一下最后的返回语句吗?

java - 创建一个上面有文字的矩形

java - HttpClient - 将 CipherInputStream 添加到 MultipartEntity

android - 我们可以在 android WebView 中保存登录数据吗?

excel - 从 Checkbox 宏中排除行或列

REST json和properties文件之间的Java编码转换

java - Mac OS X Eclipse IDE 安装.metadata/.log 报错