alibaba/easyexcel
View on GitHubAbstractVerticalCellStyleStrategy#afterCellDataConverted方法在生产环境抛出null异常
Open
#3,618 opened on Dec 21, 2023
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");
}
}