在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();这一行报错

xssfworkbook 怎么解决科学计算法

如何在POI XSSFWorkbook中消除零值数据条

使用最新的POI3.11时,在运行 XSSFWorkbook workBook = new XSSFWorkbook ();这段代码时出现错误:

使用 SXSSFWorkbook 创建 excel 并使用 XSSFWorkbook 修改时,字符串单元格数据在 excel 编辑器中不可见