alibaba/easyexcel

AbstractVerticalCellStyleStrategy#afterCellDataConverted方法在生产环境抛出null异常

Open

#3618 aperta il 21 dic 2023

Vedi su GitHub
 (1 commento) (0 reazioni) (0 assegnatari)Java (7599 fork)batch import
help wanted

Metriche repository

Star
 (33.728 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

同一局域网内电脑A与电脑B,A为开发环境,Win11,Excel下载功能正常。B为生产环境,Win10,三个类型的Excel下载功能,一样的写法两种类型都正常,一种AbstractVerticalCellStyleStrategy抛出null。

@Override
    public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, WriteCellData<?> cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
        String language = redisTemplate.opsForValue().get(WebConstants.REDIS_KEY_HEADER_LANGUAGE) == null ? REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH
                :redisTemplate.opsForValue().get(WebConstants.REDIS_KEY_HEADER_LANGUAGE).toString();

        Sheet sheet = cell.getSheet();
        Workbook workbook = sheet.getWorkbook();
        Font font = workbook.createFont();
        font.setBold(false);
        font.setTypeOffset(Font.SS_SUB);
        if(head.getFieldName().equals("deviceName")){
            if( sheet.getRow(0)!= null &&  sheet.getRow(0).getCell(0) != null) {
                sheet.getRow(0).getCell(0).setCellValue(language.equals(REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH) ? "设备" : "DEVICE");
            }
        }else if(head.getFieldName().equals("logTime")){
            if( sheet.getRow(0)!= null &&  sheet.getRow(0).getCell(1) != null) {
                sheet.getRow(0).getCell(1).setCellValue(language.equals(REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH) ? "日志时间" : "LOGTIME");
            }
        }else if(head.getFieldName().equals("dataThre")){
            if( sheet.getRow(0)!= null &&  sheet.getRow(0).getCell(2) != null) {
                sheet.getRow(0).getCell(2).setCellValue(language.equals(REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH) ? "报警项" : "DATATHRE");
            }
        }else if(head.getFieldName().equals("dataValue")){
            if( sheet.getRow(0)!= null &&  sheet.getRow(0).getCell(3) != null) {
                sheet.getRow(0).getCell(3).setCellValue(language.equals(REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH) ? "报警值" : "DATAVALUE");
            }
        }else if(head.getFieldName().equals("dataDesc")){
            if( sheet.getRow(0)!= null &&  sheet.getRow(0).getCell(4) != null) {
                sheet.getRow(0).getCell(4).setCellValue(language.equals(REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH) ? "报警描述" : "DATADESC");
            }
        }else if(head.getFieldName().equals("almType")){
            if( sheet.getRow(0)!= null &&  sheet.getRow(0).getCell(5) != null) {
                sheet.getRow(0).getCell(5).setCellValue(language.equals(REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH) ? "报警分类" : "ALARM_TYPE");
            }
        }
    }

该功能是为了实现中英文不同语言下,Header显示相应语言问题。该逻辑判断放在其他生命周期下都试过,只有放在这才能生效。加上该判断后能正常下载了,但完全没思路为什么放在生产环境下这段代码需要加判断,这块会有什么差别。以及同样在生产环境下一样的写法没问题。

@Override
    public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, WriteCellData<?> cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
        String language = redisTemplate.opsForValue().get(WebConstants.REDIS_KEY_HEADER_LANGUAGE) == null ? REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH
                :redisTemplate.opsForValue().get(WebConstants.REDIS_KEY_HEADER_LANGUAGE).toString();

        Sheet sheet = cell.getSheet();
        if(head.getFieldName().equals("deviceName")){
            sheet.getRow(0).getCell(0).setCellValue(language.equals(REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH)?"设备":"DEVICE");
        }else if(head.getFieldName().equals("logTime")){
            sheet.getRow(0).getCell(1).setCellValue(language.equals(REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH)?"日志时间":"LOGTIME");
        }else if(head.getFieldName().equals("deviceStatus")){
            sheet.getRow(0).getCell(2).setCellValue(language.equals(
                    REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH)?"设备状态":"STATUS");
        }else if(head.getFieldName().equals("deviceError")){
            sheet.getRow(0).getCell(3).setCellValue(language.equals(
                    REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH)?"异常状态":"ERROR");
        }else if(head.getFieldName().equals("deviceErrdesc")){
            sheet.getRow(0).getCell(4).setCellValue(language.equals(
                    REDIS_KEY_HEADER_DEFAULTLANGUAGE_ZH)?"异常描述":"ERRORDESP");
        }
    }

Guida contributor