Browse Source

`Converter`支持null转换 [Issue #1776]

pull/2074/head
Jiaju Zhuang 4 years ago
parent
commit
269240d8e9
  1. 10
      src/main/java/com/alibaba/excel/converters/NullableObjectConverter.java
  2. 14
      src/main/java/com/alibaba/excel/write/executor/AbstractExcelWriteExecutor.java
  3. 2
      update.md

10
src/main/java/com/alibaba/excel/converters/NullableObjectConverter.java

@ -0,0 +1,10 @@
package com.alibaba.excel.converters;
/**
* When implementing <code>convertToExcelData</code> method, pay attention to the reference <code>value</code> may be
* null
*
* @author JiaJu Zhuang
**/
public interface NullableObjectConverter<T> extends Converter<T> {
}

14
src/main/java/com/alibaba/excel/write/executor/AbstractExcelWriteExecutor.java

@ -3,6 +3,7 @@ package com.alibaba.excel.write.executor;
import com.alibaba.excel.context.WriteContext; import com.alibaba.excel.context.WriteContext;
import com.alibaba.excel.converters.Converter; import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.ConverterKeyBuild; import com.alibaba.excel.converters.ConverterKeyBuild;
import com.alibaba.excel.converters.NullableObjectConverter;
import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.exception.ExcelDataConvertException; import com.alibaba.excel.exception.ExcelDataConvertException;
import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.CellData;
@ -33,10 +34,9 @@ public abstract class AbstractExcelWriteExecutor implements ExcelWriteExecutor {
protected CellData<?> converterAndSet(WriteHolder currentWriteHolder, Class<?> clazz, CellDataTypeEnum targetType, protected CellData<?> converterAndSet(WriteHolder currentWriteHolder, Class<?> clazz, CellDataTypeEnum targetType,
Cell cell, Object value, Cell cell, Object value,
ExcelContentProperty excelContentProperty, Head head, Integer relativeRowIndex) { ExcelContentProperty excelContentProperty, Head head, Integer relativeRowIndex) {
if (value == null) { boolean needTrim = value != null && (value instanceof String && currentWriteHolder.globalConfiguration()
return new CellData<>(CellDataTypeEnum.EMPTY); .getAutoTrim());
} if (needTrim) {
if (value instanceof String && currentWriteHolder.globalConfiguration().getAutoTrim()) {
value = ((String)value).trim(); value = ((String)value).trim();
} }
CellData<?> cellData = convert(currentWriteHolder, clazz, targetType, cell, value, excelContentProperty); CellData<?> cellData = convert(currentWriteHolder, clazz, targetType, cell, value, excelContentProperty);
@ -75,9 +75,6 @@ public abstract class AbstractExcelWriteExecutor implements ExcelWriteExecutor {
protected CellData<?> convert(WriteHolder currentWriteHolder, Class<?> clazz, CellDataTypeEnum targetType, protected CellData<?> convert(WriteHolder currentWriteHolder, Class<?> clazz, CellDataTypeEnum targetType,
Cell cell, Cell cell,
Object value, ExcelContentProperty excelContentProperty) { Object value, ExcelContentProperty excelContentProperty) {
if (value == null) {
return new CellData<>(CellDataTypeEnum.EMPTY);
}
// This means that the user has defined the data. // This means that the user has defined the data.
if (value instanceof CellData) { if (value instanceof CellData) {
CellData<?> cellDataValue = (CellData<?>)value; CellData<?> cellDataValue = (CellData<?>)value;
@ -115,6 +112,9 @@ public abstract class AbstractExcelWriteExecutor implements ExcelWriteExecutor {
new CellData<>(CellDataTypeEnum.EMPTY), excelContentProperty, new CellData<>(CellDataTypeEnum.EMPTY), excelContentProperty,
"Can not find 'Converter' support class " + clazz.getSimpleName() + "."); "Can not find 'Converter' support class " + clazz.getSimpleName() + ".");
} }
if (value == null && !(converter instanceof NullableObjectConverter)) {
return new CellData<>(CellDataTypeEnum.EMPTY);
}
CellData<?> cellData; CellData<?> cellData;
try { try {
cellData = converter.convertToExcelData(value, excelContentProperty, currentWriteHolder); cellData = converter.convertToExcelData(value, excelContentProperty, currentWriteHolder);

2
update.md

@ -40,6 +40,8 @@
* 修复填充的时候,最后一行中间有空行会创建失败的bug * 修复填充的时候,最后一行中间有空行会创建失败的bug
* 修复`includeColumnIndexes`不包含第列 会无法导出数据的bug [Issue #1346](https://github.com/alibaba/easyexcel/issues/1346) * 修复`includeColumnIndexes`不包含第列 会无法导出数据的bug [Issue #1346](https://github.com/alibaba/easyexcel/issues/1346)
* 修复`@NumberFormat`注解转换double时可能会丢失精度 [Issue #1306](https://github.com/alibaba/easyexcel/issues/1306) * 修复`@NumberFormat`注解转换double时可能会丢失精度 [Issue #1306](https://github.com/alibaba/easyexcel/issues/1306)
* `Converter`支持null转换 [Issue #1776](https://github.com/alibaba/easyexcel/issues/1776)
# 2.2.3 # 2.2.3
* 修改填充数据空数据的bug [Issue #1274](https://github.com/alibaba/easyexcel/issues/1274) * 修改填充数据空数据的bug [Issue #1274](https://github.com/alibaba/easyexcel/issues/1274)

Loading…
Cancel
Save