alibaba/easyexcel

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

Open

#3,618 创建于 2023年12月21日

在 GitHub 查看
 (1 评论) (0 反应) (0 负责人)Java (7,599 fork)batch import
help wanted

仓库指标

Star
 (33,728 star)
PR 合并指标
 (30 天内没有已合并 PR)

描述

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

贡献者指南