解决:java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook(HSSFWorkbook问题
一名大二党,我姐使用Excel的时候想实现一些功能,一张Excel单据提取有效信息,输出到一个固定格式的Excel里,对于一些大神可能很简单,想使用Java解决这个问题。
会将整个过程所需文件打包放在文章最后面
,还没弄懂怎么直接发文件
网上查找相关资料,Java处理Excel的方式一共有三种,主要的有两种Poi和jxl,使用的编译环境为jdk13和Poi4.1,jxl的jar包(后面的信息显示为2009年),网上说poi的功能很强,果断poi,打开官网下载最新版poi,解压里面一堆文件
使用的eclipse2019.12版本,打开后一顿操作,首先上网查资料怎么用poi,第一步创建工程在下面创建lib包,网上说的导入jar包有很多种,经过多方尝试最终会报错(这个错误:java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook)
,我就直接把所有的jar包全部导入到lib下,全选lib下的jar包右键BuildPath,OK导入成功,创建个测试类,按照网上的教程,网上的教程零零散散,大多数介绍的都是分散的,对于刚接触poi,应该先看见最简单的源码才对啊,这里推荐CSDN里搜索到视频教程里的源码:创建简单的Excel文件并向里面写入数据
package poi;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class poi {
public static void main(String[] args) {
//创建得标题数组
String[] title = {"name","age","sex"};
//创建工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//创建sheet页
HSSFSheet sheet = workbook.createSheet();
//创建行
HSSFRow row = sheet.createRow(0);
//创建列
HSSFCell cell = null;
//使用循环把数组title写到文件里
for(int i = 0;i<title.length;i++) {
cell =row.createCell(i);
cell.setCellValue(title[i]);
}
//从第二行添加需要的数据
for (int i = 0; i < 10; i++) {
HSSFRow nextrow = sheet.createRow(i);
HSSFCell cell2 = nextrow.createCell(0);
cell2.setCellValue("a"+i);
cell2= nextrow.createCell(1);
cell2.setCellValue("user"+i);
cell2= nextrow.createCell(2);
}
//创建文件
File file =new File("e:/poi_test.xls");
try {
//把创建的sheet存储到创建的文件里
file.createNewFile();
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
System.out.println("创建成功!")
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
那么有的小伙伴直接粘贴后运行可能会出现报错:java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook(HSSFWorkbook),错误会报在:这一行HSSFWorkbook workbook = new HSSFWorkbook();
我上网找原因,可能大家用的都是老版本的jdk不会遇见这种情况,网上说是jar包没导入,以至于我把所有的包导入后依然出现这个问题,我是用的是poi,那么我换了思路使用jxl会怎么样,依然会出现问题。上网找资料说jxl版本比较老严重依赖jdk版本,回过头来想poi会不会也是这个原因,抱着试试看的想法,上网找低版本jdk,网上所提到的官网下载低版本jdk,经过我的测试都下载不了低版本jdk,打开选好后网页打不开,我开始转向CSDN,可是需要积分,算了最后求助于万能的百度云,下载到jdk.1.8_201,因为我安装了jdk13,所以这里安装jdk1.8涉及到安装双版本的jdk,请大家移步百度,按照百度的教程安装双版本jdk,没有重新启动eclipse,创建新项目没法选则jdk1.8,因为这个错误之前下载了eclipse另一个Java EE版本,打开那个也没有办法改成jdk1.8,我太笨了,难受。到这里我已经用了一天半的时间,虽然中间睡睡觉,打打吃鸡,感觉自己根本成功不了了,过了一会创建新项目竟然能选了????神仙操作
继续导入所有poi的所有jar包,创建测试类,代码粘贴jxl的,报错因为没导入jxl.jar,到入后控制台没有报错找的e盘,发现已经创建成功,打开发下写入的数据都在
挖槽,开心到爆炸,感受到了希望火速在Java se下的eclipse下,新建项目改成jdk1.8,导入所有poi的jar包,重新写了一边代码(就是上面那个),在最后一行加了一句System.out.println("创建成功!")
,运行后
文件里信息也都在,至此:java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook(HSSFWorkbook)解决完毕
根据这个问题引发了我的思考,各种外部功能,jar包等对于jdk的版本依赖很大,所以我们经常出现一些问题的时候要善于实践,多多尝试,遇到问题不能知难而退,这个解决过程里有很多小细节的问题,没有一一介绍,如果大家在解决这个问题的时候有什么问题,或者新的发现,可以随时交流分享,也请各位大神多多批评指教
所有文件,poi的jar包,jxl的jar包,jdk1.8,还有一个工具包
链接:https://pan.baidu.com/s/1GZmL9tj_hQ2n3SOjAZ4DQw
提取码:2s70
来自北京某不知名大学的大二学生
2020.2.14