框架使用POI導入與導出Excel出現的問題

框架使用POI導入與導出Excel出現的問題

在使用Java進行Excel導入導出數據的基礎上,挪到框架裏出現的問題

java如何導入導出Excel數據

1.workbook.close();報錯

 public static Workbook getWorkbook(InputStream inputStream, String fileType) throws IOException {
        Workbook workbook = null;
        if (fileType.equalsIgnoreCase(XLS)) {
            workbook = new HSSFWorkbook(inputStream);
        } else if (fileType.equalsIgnoreCase(XLSX)) {
            workbook = new XSSFWorkbook(inputStream);
        }
        return workbook;
    }

在普通Java項目里正常

if (null != workbook) {
                    workbook.close();
                }

在框架項目裏報錯,各種方式都試了依然解決不掉,後來直接把workbook.close();刪掉就好了!!!!

if (null != workbook) {
                  
                }

原因:在Java項目裏org.apache.poi.ss.usermodel.Workbook接口有close方法,且org.apache.poi.hssf.usermodel.HSSFWorkbook;類實現了close方法,所以可以正常關閉。

在框架項目裏:

org.apache.poi.hssf.usermodel.HSSFWorkbook;

org.apache.poi.ss.usermodel.Workbook;

雖然引入了jar包,但是無法尋找到source!!!,在eclipse 把鼠標放在HSSFWorkbook上按住ctrl點擊鼠標,出現source not found,很顯然這裏的HSSFWorkbook並沒有發揮它的作用,那它的方法close自然也不能使用,這裏推測是jar包版本問題,所以報錯。

2.NUMERIC報錯

在普通Java項目裏NUMERIC、STRING等是正確的:

switch (cell.getCellType()) {
            case NUMERIC:   //數字
                Double doubleValue = cell.getNumericCellValue();

                // 格式化科學計數法,取一位整數
                DecimalFormat df = new DecimalFormat("0");
                returnValue = df.format(doubleValue);
                break;
            case STRING:    //字符串
                returnValue = cell.getStringCellValue();
                break;
            case BOOLEAN:   //布爾
                Boolean booleanValue = cell.getBooleanCellValue();
                returnValue = booleanValue.toString();
                break;
            case BLANK:     // 空值
                break;
            case FORMULA:   // 公式
                returnValue = cell.getCellFormula();
                break;
            case ERROR:     // 故障
                break;
            default:
                break;
        }

在框架項目裏應該如下調整:

switch (cell.getCellType()) {
            case  HSSFCell.CELL_TYPE_NUMERIC:   //數字
                Double doubleValue = cell.getNumericCellValue();
                // 格式化科學計數法,取一位整數
                DecimalFormat df = new DecimalFormat("0");
                returnValue = df.format(doubleValue);
                break;
            case  HSSFCell.CELL_TYPE_STRING:    //字符串
                returnValue = cell.getStringCellValue();
                break;
            case  HSSFCell.CELL_TYPE_BOOLEAN:   //布爾
                Boolean booleanValue = cell.getBooleanCellValue();
                returnValue = booleanValue.toString();
                break;
            case  HSSFCell.CELL_TYPE_BLANK:     // 空值
                break;
            case  HSSFCell.CELL_TYPE_FORMULA:   // 公式
                returnValue = cell.getCellFormula();
                break;
            case  HSSFCell.CELL_TYPE_ERROR:     // 故障
                break;
            default:
                break;
        }

原因:

在Java項目裏:NUMERIC是來自CellType

org.apache.poi.ss.usermodel.CellType.NUMERIC

在框架項目裏:NUMERIC是來自Cell名字變成了CELL_TYPE_NUMERIC

org.apache.poi.ss.usermodel.Cell.CELL_TYPE_NUMERIC

其他幾個常量也是如此,版本問題而已。

3.寫出excel文件時設置樣式出錯

在普通Java裏如下代碼設置輸出的Excel文件格式是正確的:

CellStyle style = workbook.createCellStyle();
        //對齊方式設置
        style.setAlignment(HorizontalAlignment.CENTER);
        //邊框顏色和寬度設置
        style.setBorderBottom(BorderStyle.THIN);
        style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); // 下邊框
        style.setBorderLeft(BorderStyle.THIN);
        style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); // 左邊框
        style.setBorderRight(BorderStyle.THIN);
        style.setRightBorderColor(IndexedColors.BLACK.getIndex()); // 右邊框
        style.setBorderTop(BorderStyle.THIN);
        style.setTopBorderColor(IndexedColors.BLACK.getIndex()); // 上邊框
        //設置背景顏色
        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //粗體字設置
        Font font = workbook.createFont();
        font.setBold(true);
        style.setFont(font);
        return style;

在框架項目裏做如下調整:

CellStyle style = workbook.createCellStyle();
        //對齊方式設置
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        //邊框顏色和寬度設置
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); // 下邊框
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); // 左邊框
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        style.setRightBorderColor(IndexedColors.BLACK.getIndex()); // 右邊框
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        style.setTopBorderColor(IndexedColors.BLACK.getIndex()); // 上邊框
        //設置背景顏色
        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        //粗體字設置
        Font font = workbook.createFont();
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        style.setFont(font);
        return style;
發佈了30 篇原創文章 · 獲贊 0 · 訪問量 457
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章