POI:解決使用poi自帶的excel自適應列寬方法導出的excel表頭被遮擋問題

項目情況:

      pmdb項目中需要導出excel文件,因爲文件格式爲最簡單的表格樣式,所以編寫了一個通用的方法,通過輸入查詢出來的數據,生成excel,使用自適應的方式設置列寬。這時候雖然根據表格內容設置的列寬滿足要求,但是表頭的部分標題因爲過長導致被遮擋。

解決方式:

     查詢了poi底層實現之後,發覺它是通過SheetUtil的getColumnWidth方法獲取每列中每個單元格中內容的長度進行計算的。於是,我決定使用這個方法將所有的表頭的標題內容長度取出來,判斷這個長度是否大於sheet中的該列計算出來的列寬,如果是,就設置該列的列寬爲標題的長度。

代碼:

 //根據類型指定excel文件的列寬
    private static void setColumnWidthByType(SXSSFSheet sheet,int titleLength) {
        sheet.trackAllColumnsForAutoSizing();
        for(int i=0;i<titleLength;i++){
            int columnWidth = sheet.getRow(0).getCell(i).getStringCellValue().length();//獲取表頭的寬度
            int autowidth=(int)SheetUtil.getColumnWidth(sheet,i,false,1,sheet.getLastRowNum());
            if(columnWidth>autowidth){
                sheet.setColumnWidth(i, (int)256.0D*(columnWidth+1));
            }else{
                sheet.autoSizeColumn(i);
            }
        }
    }

備註:

       如果導出的表格行數過多,sheet.getRow(0)就會返回null。原因是SXSSFWorkbook初始化的時候默認傳遞rowAccessWindowSize的值爲100,也就是說只能顯示100行數據。

解決這個問題只需要在創建對象的時候傳入-1即可,這樣導出的excel就不受行數的限制了:SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(-1);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章