alibaba/easyexcel

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

Open

#3,618 opened on Dec 21, 2023

View on GitHub
 (1 comment) (0 reactions) (0 assignees)Java (7,599 forks)batch import
help wanted

Repository metrics

Stars
 (33,728 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

同一局域网内电脑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");
        }
    }

Contributor guide