我正在尝试使用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 。这有什么问题?
答案 0 :(得分:2)
详细说明Apache POI components page,要使用像XSSF这样的OOXML代码,您需要在类路径中同时使用poi
和poi-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及更低版本。