天天看點

在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上,打斷點發現不能找到這個類

于是嘗試更新依賴包

在web環境中XSSFWorkbook報錯NoClassDefFoundError二 問題發生三 問題解決

還是不行。不能解決掉,陷入了深深的思考中。對于環境問題和依賴問題,處理起來是真的難受。

嘗試了其他作者給的推薦依賴和版本,還是不行:

第一個:

在web環境中XSSFWorkbook報錯NoClassDefFoundError二 問題發生三 問題解決

第二個:

在web環境中XSSFWorkbook報錯NoClassDefFoundError二 問題發生三 問題解決

三 問題解決

繞過問題,山不過來我過去。

改變檔案格式:即xlsx為xls,最終回到了HSSFWorkbook類讀取。

這樣在web層就能通路了。

(ps:需要注意的是,如果你直接把.xlsx格式檔案變為.xls是不行的,需要先打開檔案,點選另存為.xls格式才行,這裡不能偷懶,筆者也踩過這個坑)

繼續閱讀