diff --git a/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java b/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java index ba3a3bc8ce31fc5f3d9d6eaa317f543dca34634c..1a21e315bf36a694b4f21efb00ce27e1d3e9db70 100644 --- a/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java @@ -26,7 +26,7 @@ public class BigDecimalNumberConverter implements Converter { @Override public BigDecimal convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { - return new BigDecimal(cellData.getDoubleValue()); + return BigDecimal.valueOf(cellData.getDoubleValue()); } @Override diff --git a/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalStringConverter.java b/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalStringConverter.java index b71e8b0bc305c87a1c1ca3cdc6442e0170b792ae..4f7c26b91d498baee3b4d03aa043f77d1843d874 100644 --- a/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalStringConverter.java +++ b/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalStringConverter.java @@ -1,14 +1,12 @@ package com.alibaba.excel.converters.bigdecimal; import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.DecimalFormat; import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.property.ExcelContentProperty; -import com.alibaba.excel.util.StringUtils; +import com.alibaba.excel.util.NumberUtils; /** * BigDecimal and string converter @@ -34,17 +32,6 @@ public class BigDecimalStringConverter implements Converter { @Override public CellData convertToExcelData(BigDecimal value, ExcelContentProperty contentProperty) { - String format = null; - RoundingMode roundingMode = RoundingMode.HALF_UP; - if (contentProperty.getNumberFormatProperty() != null) { - format = contentProperty.getNumberFormatProperty().getFormat(); - roundingMode = contentProperty.getNumberFormatProperty().getRoundingMode(); - } - if (StringUtils.isEmpty(format)) { - return new CellData(value.toString()); - } - DecimalFormat decimalFormat = new DecimalFormat(format); - decimalFormat.setRoundingMode(roundingMode); - return new CellData(decimalFormat.format(value)); + return NumberUtils.formatToCellData(value, contentProperty); } } diff --git a/src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java b/src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java index 262b49f5643a4016e9b969e4db0f7319c16d398f..d80bc3eca9c78190f1ea27b8881debac67505822 100644 --- a/src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java @@ -29,7 +29,7 @@ public class ByteNumberConverter implements Converter { @Override public CellData convertToExcelData(Byte value, ExcelContentProperty contentProperty) { - return new CellData((double)value); + return new CellData(value.doubleValue()); } } diff --git a/src/main/java/com/alibaba/excel/converters/byteconverter/ByteStringConverter.java b/src/main/java/com/alibaba/excel/converters/byteconverter/ByteStringConverter.java index 61b85d74ffb114339128a0bcf07be8fab0070bea..0db51f7d19a28cbd4a5d6455097d71fbdadc1683 100644 --- a/src/main/java/com/alibaba/excel/converters/byteconverter/ByteStringConverter.java +++ b/src/main/java/com/alibaba/excel/converters/byteconverter/ByteStringConverter.java @@ -4,6 +4,7 @@ import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.alibaba.excel.util.NumberUtils; /** * Byte and string converter @@ -29,7 +30,7 @@ public class ByteStringConverter implements Converter { @Override public CellData convertToExcelData(Byte value, ExcelContentProperty contentProperty) { - return new CellData(value.toString()); + return NumberUtils.formatToCellData(value, contentProperty); } } diff --git a/src/main/java/com/alibaba/excel/converters/doubleconverter/ByteBooleanConverter.java b/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleBooleanConverter.java similarity index 67% rename from src/main/java/com/alibaba/excel/converters/doubleconverter/ByteBooleanConverter.java rename to src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleBooleanConverter.java index 0ca48335ce527e7ba1a8838477151f497c99d9d7..83296115d3cf1f5421ab0147995582a333ff34d6 100644 --- a/src/main/java/com/alibaba/excel/converters/doubleconverter/ByteBooleanConverter.java +++ b/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleBooleanConverter.java @@ -6,17 +6,17 @@ import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.property.ExcelContentProperty; /** - * Byte and boolean converter + * Double and boolean converter * * @author zhuangjiaju */ -public class ByteBooleanConverter implements Converter { - private static final Byte ONE = (byte)1; - private static final Byte ZERO = (byte)0; +public class DoubleBooleanConverter implements Converter { + private static final Double ONE = 1.0; + private static final Double ZERO = 0.0; @Override public Class supportJavaTypeKey() { - return Byte.class; + return Double.class; } @Override @@ -25,7 +25,7 @@ public class ByteBooleanConverter implements Converter { } @Override - public Byte convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { + public Double convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { if (cellData.getBooleanValue()) { return ONE; } @@ -33,7 +33,7 @@ public class ByteBooleanConverter implements Converter { } @Override - public CellData convertToExcelData(Byte value, ExcelContentProperty contentProperty) { + public CellData convertToExcelData(Double value, ExcelContentProperty contentProperty) { if (ONE.equals(value)) { return new CellData(Boolean.TRUE); } diff --git a/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java b/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java index a2f9443018e54796810f787ec38f7167452c5978..8031498d78988ea1beb97f5cdebb4fffe4178be3 100644 --- a/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java @@ -23,12 +23,12 @@ public class DoubleNumberConverter implements Converter { } @Override - public Double convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) throws Exception { + public Double convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { return cellData.getDoubleValue(); } @Override - public CellData convertToExcelData(Double value, ExcelContentProperty contentProperty) throws Exception { + public CellData convertToExcelData(Double value, ExcelContentProperty contentProperty) { return new CellData(value); } diff --git a/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleStringConverter.java b/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleStringConverter.java index 6709d8e94f6bd8ea2c75c7af35edda6738fbe6ae..508fd77689311a3284c73313e2ec4902bbd0eecd 100644 --- a/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleStringConverter.java +++ b/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleStringConverter.java @@ -4,6 +4,7 @@ import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.alibaba.excel.util.NumberUtils; /** * Double and string converter @@ -29,6 +30,6 @@ public class DoubleStringConverter implements Converter { @Override public CellData convertToExcelData(Double value, ExcelContentProperty contentProperty) { - return new CellData(value.toString()); + return NumberUtils.formatToCellData(value, contentProperty); } } diff --git a/src/main/java/com/alibaba/excel/converters/floatconverter/FloatBooleanConverter.java b/src/main/java/com/alibaba/excel/converters/floatconverter/FloatBooleanConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..789dcbe6738eec06aac5726e253045ca96491f91 --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/floatconverter/FloatBooleanConverter.java @@ -0,0 +1,43 @@ +package com.alibaba.excel.converters.floatconverter; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * Float and boolean converter + * + * @author zhuangjiaju + */ +public class FloatBooleanConverter implements Converter { + private static final Float ONE = (float)1.0; + private static final Float ZERO = (float)0.0; + + @Override + public Class supportJavaTypeKey() { + return Float.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.BOOLEAN; + } + + @Override + public Float convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { + if (cellData.getBooleanValue()) { + return ONE; + } + return ZERO; + } + + @Override + public CellData convertToExcelData(Float value, ExcelContentProperty contentProperty) { + if (ONE.equals(value)) { + return new CellData(Boolean.TRUE); + } + return new CellData(Boolean.FALSE); + } + +} diff --git a/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java b/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..e190d113ae9f67419b00767e0f9d7320dcf80a41 --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java @@ -0,0 +1,35 @@ +package com.alibaba.excel.converters.floatconverter; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * Float and number converter + * + * @author zhuangjiaju + */ +public class FloatNumberConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Float.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.NUMBER; + } + + @Override + public Float convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { + return cellData.getDoubleValue().floatValue(); + } + + @Override + public CellData convertToExcelData(Float value, ExcelContentProperty contentProperty) { + return new CellData(value.doubleValue()); + } + +} diff --git a/src/main/java/com/alibaba/excel/converters/floatconverter/FloatStringConverter.java b/src/main/java/com/alibaba/excel/converters/floatconverter/FloatStringConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..fbf92d2ec7bc212767c8b3b0ba292aea612a6055 --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/floatconverter/FloatStringConverter.java @@ -0,0 +1,35 @@ +package com.alibaba.excel.converters.floatconverter; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.alibaba.excel.util.NumberUtils; + +/** + * Float and string converter + * + * @author zhuangjiaju + */ +public class FloatStringConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Float.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public Float convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { + return Float.valueOf(cellData.getStringValue()); + } + + @Override + public CellData convertToExcelData(Float value, ExcelContentProperty contentProperty) { + return NumberUtils.formatToCellData(value, contentProperty); + } +} diff --git a/src/main/java/com/alibaba/excel/converters/integer/IntegerBooleanConverter.java b/src/main/java/com/alibaba/excel/converters/integer/IntegerBooleanConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..0d4a9515312d8af294608723a4460c0baa83df6a --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/integer/IntegerBooleanConverter.java @@ -0,0 +1,43 @@ +package com.alibaba.excel.converters.integer; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * Integer and boolean converter + * + * @author zhuangjiaju + */ +public class IntegerBooleanConverter implements Converter { + private static final Integer ONE = 1; + private static final Integer ZERO = 0; + + @Override + public Class supportJavaTypeKey() { + return Integer.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.BOOLEAN; + } + + @Override + public Integer convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { + if (cellData.getBooleanValue()) { + return ONE; + } + return ZERO; + } + + @Override + public CellData convertToExcelData(Integer value, ExcelContentProperty contentProperty) { + if (ONE.equals(value)) { + return new CellData(Boolean.TRUE); + } + return new CellData(Boolean.FALSE); + } + +} diff --git a/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java b/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..89763abb849215ca0438773ec6b7756db5950c79 --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java @@ -0,0 +1,35 @@ +package com.alibaba.excel.converters.integer; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * Integer and number converter + * + * @author zhuangjiaju + */ +public class IntegerNumberConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Integer.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.NUMBER; + } + + @Override + public Integer convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { + return cellData.getDoubleValue().intValue(); + } + + @Override + public CellData convertToExcelData(Integer value, ExcelContentProperty contentProperty) { + return new CellData(value.doubleValue()); + } + +} diff --git a/src/main/java/com/alibaba/excel/converters/integer/IntegerStringConverter.java b/src/main/java/com/alibaba/excel/converters/integer/IntegerStringConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..329713f0c485bbdd8b1a9bc25849dce15d77537a --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/integer/IntegerStringConverter.java @@ -0,0 +1,35 @@ +package com.alibaba.excel.converters.integer; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.alibaba.excel.util.NumberUtils; + +/** + * Integer and string converter + * + * @author zhuangjiaju + */ +public class IntegerStringConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Integer.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public Integer convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { + return Integer.valueOf(cellData.getStringValue()); + } + + @Override + public CellData convertToExcelData(Integer value, ExcelContentProperty contentProperty) { + return NumberUtils.formatToCellData(value, contentProperty); + } +} diff --git a/src/main/java/com/alibaba/excel/converters/longconverter/IntegerBooleanConverter.java b/src/main/java/com/alibaba/excel/converters/longconverter/IntegerBooleanConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..b1b9ba39cf12473c07c118c7fb67de7eb4be99cd --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/longconverter/IntegerBooleanConverter.java @@ -0,0 +1,43 @@ +package com.alibaba.excel.converters.longconverter; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * Integer and boolean converter + * + * @author zhuangjiaju + */ +public class IntegerBooleanConverter implements Converter { + private static final Integer ONE = 1; + private static final Integer ZERO = 0; + + @Override + public Class supportJavaTypeKey() { + return Integer.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.BOOLEAN; + } + + @Override + public Integer convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { + if (cellData.getBooleanValue()) { + return ONE; + } + return ZERO; + } + + @Override + public CellData convertToExcelData(Integer value, ExcelContentProperty contentProperty) { + if (ONE.equals(value)) { + return new CellData(Boolean.TRUE); + } + return new CellData(Boolean.FALSE); + } + +} diff --git a/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java b/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..6b2d756e8938dc7b634943646a56278d21c8f926 --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java @@ -0,0 +1,35 @@ +package com.alibaba.excel.converters.longconverter; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * Long and number converter + * + * @author zhuangjiaju + */ +public class LongNumberConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Long.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.NUMBER; + } + + @Override + public Long convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { + return cellData.getDoubleValue().longValue(); + } + + @Override + public CellData convertToExcelData(Long value, ExcelContentProperty contentProperty) { + return new CellData(value.doubleValue()); + } + +} diff --git a/src/main/java/com/alibaba/excel/converters/longconverter/LongStringConverter.java b/src/main/java/com/alibaba/excel/converters/longconverter/LongStringConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..ebcc2117062d6013d4d3f72d45373fe99be590a9 --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/longconverter/LongStringConverter.java @@ -0,0 +1,35 @@ +package com.alibaba.excel.converters.longconverter; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.alibaba.excel.util.NumberUtils; + +/** + * Long and string converter + * + * @author zhuangjiaju + */ +public class LongStringConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return Long.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public Long convertToJavaData(CellData cellData, ExcelContentProperty contentProperty) { + return Long.valueOf(cellData.getStringValue()); + } + + @Override + public CellData convertToExcelData(Long value, ExcelContentProperty contentProperty) { + return NumberUtils.formatToCellData(value, contentProperty); + } +} diff --git a/src/main/java/com/alibaba/excel/util/NumberUtils.java b/src/main/java/com/alibaba/excel/util/NumberUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..b65efdf8ffb9dc999e20d75d1233c0a311750197 --- /dev/null +++ b/src/main/java/com/alibaba/excel/util/NumberUtils.java @@ -0,0 +1,35 @@ +package com.alibaba.excel.util; + +import java.math.RoundingMode; +import java.text.DecimalFormat; + +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * Number utils + * + * @author zhuangjiaju + */ +public class NumberUtils { + private NumberUtils() {} + + /** + * format + * + * @param num + * @param contentProperty + * @return + */ + public static CellData formatToCellData(Number num, ExcelContentProperty contentProperty) { + if (contentProperty.getNumberFormatProperty() == null + || StringUtils.isEmpty(contentProperty.getNumberFormatProperty().getFormat())) { + return new CellData(num.toString()); + } + String format = contentProperty.getNumberFormatProperty().getFormat(); + RoundingMode roundingMode = contentProperty.getNumberFormatProperty().getRoundingMode(); + DecimalFormat decimalFormat = new DecimalFormat(format); + decimalFormat.setRoundingMode(roundingMode); + return new CellData(decimalFormat.format(num)); + } +}