java使用poi及jxl的一些问题, 解决:java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/HSSFWorkbook

解决: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,解压里面一堆文件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

发布了3 篇原创文章 · 获赞 4 · 访问量 148

猜你喜欢

转载自blog.csdn.net/weixin_43958308/article/details/104310611