From 9b3c8f129ce5da381f58349632e770f65a9c7463 Mon Sep 17 00:00:00 2001 From: zhuangjiaju Date: Tue, 16 Jul 2019 14:37:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E9=BB=98=E8=AE=A4=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bigdecimal/BigDecimalNumberConverter.java | 2 +- .../bigdecimal/BigDecimalStringConverter.java | 17 +------- .../byteconverter/ByteNumberConverter.java | 2 +- .../byteconverter/ByteStringConverter.java | 3 +- ...erter.java => DoubleBooleanConverter.java} | 14 +++--- .../DoubleNumberConverter.java | 4 +- .../DoubleStringConverter.java | 3 +- .../floatconverter/FloatBooleanConverter.java | 43 +++++++++++++++++++ .../floatconverter/FloatNumberConverter.java | 35 +++++++++++++++ .../floatconverter/FloatStringConverter.java | 35 +++++++++++++++ .../integer/IntegerBooleanConverter.java | 43 +++++++++++++++++++ .../integer/IntegerNumberConverter.java | 35 +++++++++++++++ .../integer/IntegerStringConverter.java | 35 +++++++++++++++ .../IntegerBooleanConverter.java | 43 +++++++++++++++++++ .../longconverter/LongNumberConverter.java | 35 +++++++++++++++ .../longconverter/LongStringConverter.java | 35 +++++++++++++++ .../com/alibaba/excel/util/NumberUtils.java | 35 +++++++++++++++ 17 files changed, 391 insertions(+), 28 deletions(-) rename src/main/java/com/alibaba/excel/converters/doubleconverter/{ByteBooleanConverter.java => DoubleBooleanConverter.java} (67%) create mode 100644 src/main/java/com/alibaba/excel/converters/floatconverter/FloatBooleanConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/floatconverter/FloatStringConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/integer/IntegerBooleanConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/integer/IntegerStringConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/longconverter/IntegerBooleanConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/longconverter/LongStringConverter.java create mode 100644 src/main/java/com/alibaba/excel/util/NumberUtils.java 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 ba3a3bc..1a21e31 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 b71e8b0..4f7c26b 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 262b49f..d80bc3e 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 61b85d7..0db51f7 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 0ca4833..8329611 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 a2f9443..8031498 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 6709d8e..508fd77 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 0000000..789dcbe --- /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 0000000..e190d11 --- /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 0000000..fbf92d2 --- /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 0000000..0d4a951 --- /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 0000000..89763ab --- /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 0000000..329713f --- /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 0000000..b1b9ba3 --- /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 0000000..6b2d756 --- /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 0000000..ebcc211 --- /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 0000000..b65efdf --- /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)); + } +}