diff --git a/pom.xml b/pom.xml index 0a629230..1e5785de 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.alibaba easyexcel - 2.0.0-beta6 + 2.0.0 jar easyexcel diff --git a/quickstart.md b/quickstart.md index 27267d8d..2b6323f9 100644 --- a/quickstart.md +++ b/quickstart.md @@ -7,6 +7,8 @@ * 单个文件的并发写入、读取 * 读取图片 * 宏 +#### 关于版本兼容 +目前poi用的 4.0.1 建议检查是否该版本。如果看到`NoClassDefFoundError`或者`ClassNotFoundException`,请查看poi相关版本是否都为4.0.1。 #### 详细参数介绍 有些参数不知道怎么用,或者有些功能不知道用什么参数,参照:[详细参数介绍](/docs/API.md) #### 开源项目不容易,如果觉得本项目对您的工作还是有帮助的话,请在右上角帮忙点个★Star。 @@ -573,20 +575,26 @@ public class ComplexHeadData { ```java /** * 重复多次写入 - *

1. 创建excel对应的实体对象 参照{@link ComplexHeadData} - *

2. 使用{@link ExcelProperty}注解指定复杂的头 - *

3. 直接调用二次写入即可 + *

+ * 1. 创建excel对应的实体对象 参照{@link ComplexHeadData} + *

+ * 2. 使用{@link ExcelProperty}注解指定复杂的头 + *

+ * 3. 直接调用二次写入即可 */ @Test public void repeatedWrite() { String fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; // 这里 需要指定写用哪个class去读 ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build(); + // 这里注意 如果同一个sheet只要创建一次 WriteSheet writeSheet = EasyExcel.writerSheet("模板").build(); - // 第一次写入会创建头 - excelWriter.write(data(), writeSheet); - // 第二次写入会在上一次写入的最后一行后面写入 - excelWriter.write(data(), writeSheet); + // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来 + for (int i = 0; i < 5; i++) { + // 分页去数据库查询数据 这里可以去数据库查询每一页的数据 + List data = data(); + excelWriter.write(data, writeSheet); + } /// 千万别忘记finish 会帮忙关闭流 excelWriter.finish(); } @@ -1038,14 +1046,18 @@ DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/ja 参照:[对象](#simpleWriteObject) 就是名称变了下 ##### 代码 ```java - /** + /** * 文件下载 - *

1. 创建excel对应的实体对象 参照{@link DownloadData} - *

2. 设置返回的 参数 - *

3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大 + *

+ * 1. 创建excel对应的实体对象 参照{@link DownloadData} + *

+ * 2. 设置返回的 参数 + *

+ * 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大 */ @GetMapping("download") public void download(HttpServletResponse response) throws IOException { + // 这里注意 有同学反应下载的文件名不对。这个时候 请别使用swagger 他会影像 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=demo.xlsx"); diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java b/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java index f8899c03..0ff8f995 100644 --- a/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java +++ b/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java @@ -1,5 +1,7 @@ package com.alibaba.excel.analysis.v03.handlers; +import java.math.BigDecimal; + import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener; import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.record.FormulaRecord; @@ -66,7 +68,7 @@ public class FormulaRecordHandler extends AbstractXlsRecordHandler { tempCellData.setFormulaValue(formulaValue); break; case NUMERIC: - this.cellData = new CellData(frec.getValue()); + this.cellData = new CellData(BigDecimal.valueOf(frec.getValue())); this.cellData.setFormula(Boolean.TRUE); this.cellData.setFormulaValue(formulaValue); break; diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java b/src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java index 23aff5a3..75c3128a 100644 --- a/src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java +++ b/src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java @@ -1,5 +1,7 @@ package com.alibaba.excel.analysis.v03.handlers; +import java.math.BigDecimal; + import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener; import org.apache.poi.hssf.record.NumberRecord; import org.apache.poi.hssf.record.Record; @@ -29,7 +31,7 @@ public class NumberRecordHandler extends AbstractXlsRecordHandler { NumberRecord numrec = (NumberRecord)record; this.row = numrec.getRow(); this.column = numrec.getColumn(); - this.cellData = new CellData(numrec.getValue()); + this.cellData = new CellData(BigDecimal.valueOf(numrec.getValue())); this.cellData.setDataFormat(formatListener.getFormatIndex(numrec)); this.cellData.setDataFormatString(formatListener.getFormatString(numrec)); } diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java b/src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java index 37d12ad7..c0ad7064 100644 --- a/src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java +++ b/src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java @@ -7,6 +7,9 @@ import static com.alibaba.excel.constant.ExcelXmlConstants.CELL_TAG; import static com.alibaba.excel.constant.ExcelXmlConstants.CELL_VALUE_TAG; import static com.alibaba.excel.constant.ExcelXmlConstants.CELL_VALUE_TYPE_TAG; +import java.math.BigDecimal; +import java.util.Deque; +import java.util.LinkedList; import java.util.Map; import java.util.TreeMap; @@ -33,8 +36,7 @@ import com.alibaba.excel.util.StringUtils; */ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder { private final AnalysisContext analysisContext; - private String currentTag; - private String currentCellIndex; + private Deque currentTagDeque = new LinkedList(); private int curCol; private Map curRowContent = new TreeMap(); private CellData currentCellData; @@ -61,11 +63,10 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder @Override public void startHandle(String name, Attributes attributes) { - currentTag = name; + currentTagDeque.push(name); // start a cell if (CELL_TAG.equals(name)) { - currentCellIndex = attributes.getValue(ExcelXmlConstants.POSITION); - curCol = PositionUtils.getCol(currentCellIndex); + curCol = PositionUtils.getCol(attributes.getValue(ExcelXmlConstants.POSITION)); // t="s" ,it's means String // t="str" ,it's means String,but does not need to be read in the 'sharedStrings.xml' @@ -100,6 +101,7 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder @Override public void endHandle(String name) { + currentTagDeque.pop(); if (CELL_VALUE_TAG.equals(name)) { // Have to go "sharedStrings.xml" and get it if (currentCellData.getType() == CellDataTypeEnum.STRING) { @@ -133,6 +135,7 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder if (StringUtils.isEmpty(currentCellValue)) { return; } + String currentTag = currentTagDeque.peek(); if (currentTag == null) { return; } @@ -162,8 +165,8 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder case NUMBER: case EMPTY: currentCellData.setType(CellDataTypeEnum.NUMBER); - if (currentCellData.getDoubleValue() == null) { - currentCellData.setDoubleValue(Double.valueOf(currentCellValue)); + if (currentCellData.getNumberValue() == null) { + currentCellData.setNumberValue(new BigDecimal(currentCellValue)); } break; default: 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 f7f14057..bf9b735f 100644 --- a/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java @@ -28,12 +28,12 @@ public class BigDecimalNumberConverter implements Converter { @Override public BigDecimal convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return BigDecimal.valueOf(cellData.getDoubleValue()); + return cellData.getNumberValue(); } @Override public CellData convertToExcelData(BigDecimal value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return new CellData(value.doubleValue()); + return new CellData(value); } } diff --git a/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java b/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java index 44cbdb9d..a0042eaa 100644 --- a/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java @@ -1,5 +1,7 @@ package com.alibaba.excel.converters.booleanconverter; +import java.math.BigDecimal; + import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; @@ -12,10 +14,6 @@ import com.alibaba.excel.metadata.property.ExcelContentProperty; * @author Jiaju Zhuang */ public class BooleanNumberConverter implements Converter { - - private static final Double ONE = 1.0; - private static final Double ZERO = 0.0; - @Override public Class supportJavaTypeKey() { return Boolean.class; @@ -29,7 +27,7 @@ public class BooleanNumberConverter implements Converter { @Override public Boolean convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - if (ONE.equals(cellData.getDoubleValue())) { + if (BigDecimal.ONE.compareTo(cellData.getNumberValue()) == 0) { return Boolean.TRUE; } return Boolean.FALSE; @@ -39,9 +37,9 @@ public class BooleanNumberConverter implements Converter { public CellData convertToExcelData(Boolean value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { if (value) { - return new CellData(ONE); + return new CellData(BigDecimal.ONE); } - return new CellData(ZERO); + return new CellData(BigDecimal.ZERO); } } 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 c3ecf47d..8c16a779 100644 --- a/src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java @@ -1,5 +1,7 @@ package com.alibaba.excel.converters.byteconverter; +import java.math.BigDecimal; + import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; @@ -26,13 +28,13 @@ public class ByteNumberConverter implements Converter { @Override public Byte convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return cellData.getDoubleValue().byteValue(); + return cellData.getNumberValue().byteValue(); } @Override public CellData convertToExcelData(Byte value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return new CellData(value.doubleValue()); + return new CellData(BigDecimal.valueOf(value)); } } diff --git a/src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java b/src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java index 810188a3..fcc76bb3 100644 --- a/src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java @@ -1,8 +1,9 @@ package com.alibaba.excel.converters.date; +import java.math.BigDecimal; import java.util.Date; -import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.ss.usermodel.DateUtil; import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; @@ -31,9 +32,10 @@ public class DateNumberConverter implements Converter { public Date convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { if (contentProperty == null || contentProperty.getDateTimeFormatProperty() == null) { - return HSSFDateUtil.getJavaDate(cellData.getDoubleValue(), globalConfiguration.getUse1904windowing(), null); + return DateUtil.getJavaDate(cellData.getNumberValue().doubleValue(), + globalConfiguration.getUse1904windowing(), null); } else { - return HSSFDateUtil.getJavaDate(cellData.getDoubleValue(), + return DateUtil.getJavaDate(cellData.getNumberValue().doubleValue(), contentProperty.getDateTimeFormatProperty().getUse1904windowing(), null); } } @@ -41,6 +43,12 @@ public class DateNumberConverter implements Converter { @Override public CellData convertToExcelData(Date value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return new CellData((double)(value.getTime())); + if (contentProperty == null || contentProperty.getDateTimeFormatProperty() == null) { + return new CellData( + BigDecimal.valueOf(DateUtil.getExcelDate(value, globalConfiguration.getUse1904windowing()))); + } else { + return new CellData(BigDecimal.valueOf( + DateUtil.getExcelDate(value, contentProperty.getDateTimeFormatProperty().getUse1904windowing()))); + } } } 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 f272c824..15fbdae3 100644 --- a/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java @@ -1,5 +1,7 @@ package com.alibaba.excel.converters.doubleconverter; +import java.math.BigDecimal; + import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; @@ -26,13 +28,13 @@ public class DoubleNumberConverter implements Converter { @Override public Double convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return cellData.getDoubleValue(); + return cellData.getNumberValue().doubleValue(); } @Override public CellData convertToExcelData(Double value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return new CellData(value); + return new CellData(BigDecimal.valueOf(value)); } } diff --git a/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java b/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java index 8913a571..a1b64719 100644 --- a/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java @@ -1,5 +1,7 @@ package com.alibaba.excel.converters.floatconverter; +import java.math.BigDecimal; + import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; @@ -26,13 +28,13 @@ public class FloatNumberConverter implements Converter { @Override public Float convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return cellData.getDoubleValue().floatValue(); + return cellData.getNumberValue().floatValue(); } @Override public CellData convertToExcelData(Float value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return new CellData(value.doubleValue()); + return new CellData(BigDecimal.valueOf(value)); } } diff --git a/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java b/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java index 4dff32d9..3b0deac6 100644 --- a/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java @@ -1,5 +1,7 @@ package com.alibaba.excel.converters.integer; +import java.math.BigDecimal; + import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; @@ -26,13 +28,13 @@ public class IntegerNumberConverter implements Converter { @Override public Integer convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return cellData.getDoubleValue().intValue(); + return cellData.getNumberValue().intValue(); } @Override public CellData convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return new CellData(value.doubleValue()); + return new CellData(BigDecimal.valueOf(value)); } } diff --git a/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java b/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java index bceedd55..8058d624 100644 --- a/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java @@ -1,5 +1,7 @@ package com.alibaba.excel.converters.longconverter; +import java.math.BigDecimal; + import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; @@ -26,13 +28,13 @@ public class LongNumberConverter implements Converter { @Override public Long convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return cellData.getDoubleValue().longValue(); + return cellData.getNumberValue().longValue(); } @Override public CellData convertToExcelData(Long value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return new CellData(value.doubleValue()); + return new CellData(BigDecimal.valueOf(value)); } } diff --git a/src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java b/src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java index 91f6579c..7d1d7da2 100644 --- a/src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java @@ -1,5 +1,7 @@ package com.alibaba.excel.converters.shortconverter; +import java.math.BigDecimal; + import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; @@ -26,13 +28,13 @@ public class ShortNumberConverter implements Converter { @Override public Short convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return cellData.getDoubleValue().shortValue(); + return cellData.getNumberValue().shortValue(); } @Override public CellData convertToExcelData(Short value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return new CellData(value.doubleValue()); + return new CellData(BigDecimal.valueOf(value)); } } diff --git a/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java b/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java index 62b25238..f536a088 100644 --- a/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java @@ -1,6 +1,7 @@ package com.alibaba.excel.converters.string; -import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import java.math.BigDecimal; + import org.apache.poi.ss.usermodel.DateUtil; import com.alibaba.excel.converters.Converter; @@ -34,30 +35,30 @@ public class StringNumberConverter implements Converter { // If there are "DateTimeFormat", read as date if (contentProperty != null && contentProperty.getDateTimeFormatProperty() != null) { return DateUtils.format( - HSSFDateUtil.getJavaDate(cellData.getDoubleValue(), + DateUtil.getJavaDate(cellData.getNumberValue().doubleValue(), contentProperty.getDateTimeFormatProperty().getUse1904windowing(), null), contentProperty.getDateTimeFormatProperty().getFormat()); } // If there are "NumberFormat", read as number if (contentProperty != null && contentProperty.getNumberFormatProperty() != null) { - return NumberUtils.format(cellData.getDoubleValue(), contentProperty); + return NumberUtils.format(cellData.getNumberValue(), contentProperty); } // Excel defines formatting if (cellData.getDataFormat() != null) { if (DateUtil.isADateFormat(cellData.getDataFormat(), cellData.getDataFormatString())) { - return DateUtils.format(HSSFDateUtil.getJavaDate(cellData.getDoubleValue(), + return DateUtils.format(DateUtil.getJavaDate(cellData.getNumberValue().doubleValue(), globalConfiguration.getUse1904windowing(), null)); } else { - return NumberUtils.format(cellData.getDoubleValue(), contentProperty); + return NumberUtils.format(cellData.getNumberValue(), contentProperty); } } // Default conversion number - return NumberUtils.format(cellData.getDoubleValue(), contentProperty); + return NumberUtils.format(cellData.getNumberValue(), contentProperty); } @Override public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return new CellData(Double.valueOf(value)); + return new CellData(new BigDecimal(value)); } } diff --git a/src/main/java/com/alibaba/excel/metadata/CellData.java b/src/main/java/com/alibaba/excel/metadata/CellData.java index 0a1ffeb0..7eb8de65 100644 --- a/src/main/java/com/alibaba/excel/metadata/CellData.java +++ b/src/main/java/com/alibaba/excel/metadata/CellData.java @@ -1,5 +1,7 @@ package com.alibaba.excel.metadata; +import java.math.BigDecimal; + import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.util.StringUtils; @@ -13,7 +15,7 @@ public class CellData { /** * {@link CellDataTypeEnum#NUMBER} */ - private Double doubleValue; + private BigDecimal numberValue; /** * {@link CellDataTypeEnum#STRING} and{@link CellDataTypeEnum#ERROR} */ @@ -36,7 +38,7 @@ public class CellData { public CellData(CellData other) { this.type = other.type; - this.doubleValue = other.doubleValue; + this.numberValue = other.numberValue; this.stringValue = other.stringValue; this.booleanValue = other.booleanValue; this.formula = other.formula; @@ -62,12 +64,12 @@ public class CellData { this.formula = Boolean.FALSE; } - public CellData(Double doubleValue) { - if (doubleValue == null) { + public CellData(BigDecimal numberValue) { + if (numberValue == null) { throw new IllegalArgumentException("DoubleValue can not be null"); } this.type = CellDataTypeEnum.NUMBER; - this.doubleValue = doubleValue; + this.numberValue = numberValue; this.formula = Boolean.FALSE; } @@ -105,12 +107,12 @@ public class CellData { this.type = type; } - public Double getDoubleValue() { - return doubleValue; + public BigDecimal getNumberValue() { + return numberValue; } - public void setDoubleValue(Double doubleValue) { - this.doubleValue = doubleValue; + public void setNumberValue(BigDecimal numberValue) { + this.numberValue = numberValue; } public String getStringValue() { @@ -181,7 +183,7 @@ public class CellData { } return; case NUMBER: - if (doubleValue == null) { + if (numberValue == null) { type = CellDataTypeEnum.EMPTY; } return; @@ -198,7 +200,7 @@ public class CellData { public String toString() { switch (type) { case NUMBER: - return doubleValue.toString(); + return numberValue.toString(); case BOOLEAN: return booleanValue.toString(); case STRING: diff --git a/src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java b/src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java index 3c257262..6f0ae1c4 100644 --- a/src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java +++ b/src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java @@ -312,7 +312,7 @@ public class ExcelBuilderImpl implements ExcelBuilder { cell.setCellValue(cellData.getBooleanValue()); return cellData; case NUMBER: - cell.setCellValue(cellData.getDoubleValue()); + cell.setCellValue(cellData.getNumberValue().doubleValue()); return cellData; case IMAGE: setImageValue(cellData, cell); diff --git a/src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java b/src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java index 5c6ec8c9..320573bd 100644 --- a/src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java +++ b/src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java @@ -58,7 +58,7 @@ public class LongestMatchColumnWidthStyleStrategy extends AbstractColumnWidthSty case BOOLEAN: return cellData.getBooleanValue().toString().getBytes().length; case NUMBER: - return cellData.getDoubleValue().toString().getBytes().length; + return cellData.getNumberValue().toString().getBytes().length; default: return -1; } diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java b/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java index f4f0a1e7..c8b5d8bf 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java +++ b/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java @@ -65,7 +65,8 @@ public class ReadAllConverterDataListener extends AnalysisEventListener data = data(); + excelWriter.write(data, writeSheet); + } /// 千万别忘记finish 会帮忙关闭流 excelWriter.finish(); } diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java b/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java index 4ece35e1..a70275b3 100644 --- a/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java @@ -24,7 +24,7 @@ public class HgTest { @Test public void hh() throws IOException { List list = - EasyExcel.read(new FileInputStream("D:\\test\\商户不匹配工单信息收集表格.xlsx")).headRowNumber(0).sheet().doReadSync(); + EasyExcel.read(new FileInputStream("D:\\test\\number.xlsx")).headRowNumber(0).sheet().doReadSync(); for (Object data : list) { LOGGER.info("返回数据:{}", JSON.toJSONString(data)); } diff --git a/update.md b/update.md index 60dd1edf..0efb5ef5 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,8 @@ +# 2.0.0 +* 修复当cell为空可能会抛出空指针的bug +* 修复电话等长数字可能出现科学计数法的问题 [Issue #583](https://github.com/alibaba/easyexcel/issues/583) +* 升级为正式版 + # 2.0.0-beta6 * 修复空行读取空指针异常 * 修复写入指定头为List>,但是数据用List导致的空指针