在web环境中XSSFWorkbook报错NoClassDefFoundError
Posted amcomputer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在web环境中XSSFWorkbook报错NoClassDefFoundError相关的知识,希望对你有一定的参考价值。
一背景介绍
java web环境需要读取excel表格中的数据,插入到数据库中,需要用到XSSFWorkbook类读表格文件,关键代码如下:
//读取excel
public static Workbook readExcel(String filePath) {
Workbook wb = null;
if (filePath == null) {
return null;
}
String extString = filePath.substring(filePath.lastIndexOf("."));
InputStream is = null;
try {
is = new FileInputStream(filePath);
if (".xls".equals(extString)) {
return wb = new HSSFWorkbook(is);
} else if (".xlsx".equals(extString)) {
return wb = new XSSFWorkbook(is);
} else {
return wb = null;
}
} catch (FileNotFoundException e) {
LOGGER.error(e.toString());
} catch (IOException e) {
LOGGER.error(e.toString());
}
return wb;
}
二 问题发生
在本地运行,如写个main方法跑或者用@test跑是能正常运行,但是到web上,打断点发现不能找到这个类
于是尝试升级依赖包
还是不行。不能解决掉,陷入了深深的思考中。对于环境问题和依赖问题,处理起来是真的难受。
尝试了其他作者给的推荐依赖和版本,还是不行:
第一个:
第二个:
三 问题解决
绕过问题,山不过来我过去。
改变文件格式:即xlsx为xls,最终回到了HSSFWorkbook类读取。
PATH = "/Users/xxx/work/B/A_info.xlsx";
为
PATH = "/Users/xxx/work/B/A_info.xls";
这样在web层就能访问了。
(ps:需要注意的是,如果你直接把.xlsx格式文件变为.xls是不行的,需要先打开文件,点击另存为.xls格式才行,这里不能偷懒,笔者也踩过这个坑)
以上是关于在web环境中XSSFWorkbook报错NoClassDefFoundError的主要内容,如果未能解决你的问题,请参考以下文章
使用POI操作Excel时new XSSFWorkbook ()报错java.lang.NoSuchMethodError解决方式
poi 3.8生成excel2007时,debug到Workbook wb =new XSSFWorkbook();这一行报错
使用最新的POI3.11时,在运行 XSSFWorkbook workBook = new XSSFWorkbook ();这段代码时出现错误:
使用 SXSSFWorkbook 创建 excel 并使用 XSSFWorkbook 修改时,字符串单元格数据在 excel 编辑器中不可见