From 544682f146ab3cf71175e0b609c23f61e2d5a813 Mon Sep 17 00:00:00 2001 From: Lilac Coral Date: Tue, 14 Feb 2023 08:53:18 +0800 Subject: [PATCH 01/53] Update ReadListener.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改注释拼写 --- .../main/java/com/alibaba/excel/read/listener/ReadListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ReadListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ReadListener.java index b56f8a56..79899153 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ReadListener.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ReadListener.java @@ -36,7 +36,7 @@ public interface ReadListener extends Listener { /** * When analysis one row trigger invoke function. * - * @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()} + * @param data one row value. It is same as {@link AnalysisContext#readRowHolder()} * @param context analysis context */ void invoke(T data, AnalysisContext context); From bed09d026a903d4cacd5001c078ff2e94774002c Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Tue, 21 Feb 2023 11:21:42 +0800 Subject: [PATCH 02/53] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../alibaba/easyexcel/test/demo/fill/FillTest.java | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java index 3b3c37fc..7023f31f 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java @@ -73,18 +73,7 @@ public class FillTest { // 这里 会填充到第一个sheet, 然后文件流会自动关闭 EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(data()); - // 方案2 分多次 填充 会使用文件缓存(省内存) jdk8 - // since: 3.0.0-beta1 - fileName = TestFileUtil.getPath() + "listFill" + System.currentTimeMillis() + ".xlsx"; - EasyExcel.write(fileName) - .withTemplate(templateFileName) - .sheet() - .doFill(() -> { - // 分页查询数据 - return data(); - }); - - // 方案3 分多次 填充 会使用文件缓存(省内存) + // 方案2 分多次 填充 会使用文件缓存(省内存) fileName = TestFileUtil.getPath() + "listFill" + System.currentTimeMillis() + ".xlsx"; try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()) { WriteSheet writeSheet = EasyExcel.writerSheet().build(); From 93d968ac27321dab2c70d4d3a0912d7f244f0e72 Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Tue, 28 Feb 2023 14:06:55 +0800 Subject: [PATCH 03/53] delete poi same name package, move PoiUtils to excel utils package. fix Java9 modular bug --- .../java/com/alibaba/excel/util/PoiUtils.java | 61 +++++++++++++++++++ .../executor/ExcelWriteFillExecutor.java | 2 +- .../apache/poi/hssf/usermodel/PoiUtils.java | 37 ----------- 3 files changed, 62 insertions(+), 38 deletions(-) create mode 100644 easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java delete mode 100644 easyexcel-core/src/main/java/org/apache/poi/hssf/usermodel/PoiUtils.java diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java new file mode 100644 index 00000000..2989b22b --- /dev/null +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java @@ -0,0 +1,61 @@ +package com.alibaba.excel.util; + +import com.alibaba.excel.exception.ExcelRuntimeException; +import org.apache.poi.hssf.record.RowRecord; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.util.BitField; +import org.apache.poi.util.BitFieldFactory; +import org.apache.poi.xssf.usermodel.XSSFRow; + +import java.lang.reflect.Field; + +/** + * utils + * + * @author Jiaju Zhuang + */ +public class PoiUtils { + + /** + * Whether to customize the height + */ + public static final BitField CUSTOM_HEIGHT = BitFieldFactory.getInstance(0x640); + + private static Field ROW_RECORD_FIELD; + + /** + * Whether to customize the height + * + * @param row row + * @return + */ + public static boolean customHeight(Row row) { + if (row instanceof XSSFRow) { + XSSFRow xssfRow = (XSSFRow) row; + return xssfRow.getCTRow().getCustomHeight(); + } + if (row instanceof HSSFRow) { + HSSFRow hssfRow = (HSSFRow) row; + try { + if (ROW_RECORD_FIELD == null) { + initRowRecordField(); + } + RowRecord record = (RowRecord) ROW_RECORD_FIELD.get(hssfRow); + return CUSTOM_HEIGHT.getValue(record.getOptionFlags()) == 1; + } catch (IllegalAccessException ignore) { + } + } + return false; + } + + + private static void initRowRecordField() { + try { + ROW_RECORD_FIELD = HSSFRow.class.getDeclaredField("row"); + ROW_RECORD_FIELD.setAccessible(true); + } catch (NoSuchFieldException e) { + throw new ExcelRuntimeException(e); + } + } +} diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java index 6779e875..f6dc1955 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java @@ -37,7 +37,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; import org.apache.commons.collections4.CollectionUtils; -import org.apache.poi.hssf.usermodel.PoiUtils; +import com.alibaba.excel.util.PoiUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellType; diff --git a/easyexcel-core/src/main/java/org/apache/poi/hssf/usermodel/PoiUtils.java b/easyexcel-core/src/main/java/org/apache/poi/hssf/usermodel/PoiUtils.java deleted file mode 100644 index 4f1d404f..00000000 --- a/easyexcel-core/src/main/java/org/apache/poi/hssf/usermodel/PoiUtils.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.apache.poi.hssf.usermodel; - -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.util.BitField; -import org.apache.poi.util.BitFieldFactory; -import org.apache.poi.xssf.usermodel.XSSFRow; - -/** - * utils - * - * @author Jiaju Zhuang - */ -public class PoiUtils { - - /** - * Whether to customize the height - */ - public static final BitField CUSTOM_HEIGHT = BitFieldFactory.getInstance(0x640); - - /** - * Whether to customize the height - * - * @param row row - * @return - */ - public static boolean customHeight(Row row) { - if (row instanceof XSSFRow) { - XSSFRow xssfRow = (XSSFRow)row; - return xssfRow.getCTRow().getCustomHeight(); - } - if (row instanceof HSSFRow) { - HSSFRow hssfRow = (HSSFRow)row; - return CUSTOM_HEIGHT.getValue(hssfRow.getRowRecord().getOptionFlags()) == 1; - } - return false; - } -} From 94421ab8a40ed17c0881cafc20f15d3b2f23de34 Mon Sep 17 00:00:00 2001 From: syyyj <3139487747@qq.com> Date: Sat, 4 Mar 2023 03:02:36 +0800 Subject: [PATCH 04/53] Word error Word error --- README_EN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_EN.md b/README_EN.md index 619f4161..10135fed 100644 --- a/README_EN.md +++ b/README_EN.md @@ -122,7 +122,7 @@ DEMO:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/aliba * 1. Create an entity object, refer to{@link DownloadData}. * Each property of the entity object corresponds to a specific field of Excel * 2. Specify the returned properties - * 3. Invoke wirte function, then the OutputStream is automatically closed when it ends. + * 3. Invoke write function, then the OutputStream is automatically closed when it ends. *

*/ @GetMapping("download") From 6dcf356dba3d79c61601648052a19dda5bcad874 Mon Sep 17 00:00:00 2001 From: supalle Date: Sat, 4 Mar 2023 13:57:03 +0800 Subject: [PATCH 05/53] =?UTF-8?q?=E6=B7=BB=E5=8A=A0CSV=E7=9A=84BOM?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../analysis/csv/BomBufferedInputStream.java | 91 ++++++++++++++ .../excel/analysis/csv/ByteOrderMark.java | 112 ++++++++++++++++++ .../holder/csv/CsvReadWorkbookHolder.java | 34 +++++- .../easyexcel/test/core/bom/BomData.java | 16 +++ .../easyexcel/test/core/bom/BomDataTest.java | 53 +++++++++ .../src/test/resources/bom/bom_none.csv | 11 ++ .../src/test/resources/bom/bom_utf16be.csv | Bin 0 -> 152 bytes .../src/test/resources/bom/bom_utf16le.csv | Bin 0 -> 152 bytes .../src/test/resources/bom/bom_utf8.csv | 11 ++ 9 files changed, 327 insertions(+), 1 deletion(-) create mode 100644 easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java create mode 100644 easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java create mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomData.java create mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomDataTest.java create mode 100644 easyexcel-test/src/test/resources/bom/bom_none.csv create mode 100644 easyexcel-test/src/test/resources/bom/bom_utf16be.csv create mode 100644 easyexcel-test/src/test/resources/bom/bom_utf16le.csv create mode 100644 easyexcel-test/src/test/resources/bom/bom_utf8.csv diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java new file mode 100644 index 00000000..9a53520d --- /dev/null +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java @@ -0,0 +1,91 @@ +package com.alibaba.excel.analysis.csv; + + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * This class is used to wrap a stream that includes an encoded {@link ByteOrderMark} as its first bytes. + * + * @author supalle + * @see Byte Order Mark (BOM) FAQ + * @see Apache CommonsIO BOMInputStream + */ +public class BomBufferedInputStream extends BufferedInputStream { + public final static List DEFAULT_BYTE_ORDER_MARKS = new ArrayList<>(); + + static { + DEFAULT_BYTE_ORDER_MARKS.add(ByteOrderMark.UTF_8); + DEFAULT_BYTE_ORDER_MARKS.add(ByteOrderMark.UTF_16BE); + DEFAULT_BYTE_ORDER_MARKS.add(ByteOrderMark.UTF_16LE); + DEFAULT_BYTE_ORDER_MARKS.add(ByteOrderMark.UTF_32BE); + DEFAULT_BYTE_ORDER_MARKS.add(ByteOrderMark.UTF_32LE); + } + + private boolean initialized; + private ByteOrderMark byteOrderMark; + private final List byteOrderMarks; + + public BomBufferedInputStream(InputStream in, final ByteOrderMark... byteOrderMarks) { + super(in); + this.byteOrderMarks = applyByteOrderMarks(byteOrderMarks); + } + + public BomBufferedInputStream(InputStream in, int size, final ByteOrderMark... byteOrderMarks) { + super(in, size); + this.byteOrderMarks = applyByteOrderMarks(byteOrderMarks); + } + + private static List applyByteOrderMarks(ByteOrderMark[] byteOrderMarks) { + return byteOrderMarks == null || byteOrderMarks.length == 0 ? DEFAULT_BYTE_ORDER_MARKS : Arrays.asList(byteOrderMarks); + } + + public boolean hasByteOrderMark() throws IOException { + return getByteOrderMark() != null; + } + + public ByteOrderMark getByteOrderMark() throws IOException { + if (initialized) { + return byteOrderMark; + } + this.byteOrderMarks.sort(ByteOrderMark::compareTo); + int maxBomLength = byteOrderMarks.get(0).length(); + mark(maxBomLength); + int[] firstBytes = new int[maxBomLength]; + for (int i = 0; i < maxBomLength; i++) { + firstBytes[i] = read(); + if (firstBytes[i] < 0) { + break; + } + } + byteOrderMark = matchByteOrderMark(this.byteOrderMarks, firstBytes); + + reset(); + if (byteOrderMark != null) { + // read(new byte[byteOrderMark.length()]); + skip(byteOrderMark.length()); + } + initialized = true; + return byteOrderMark; + } + + private ByteOrderMark matchByteOrderMark(final List byteOrderMarks, final int[] firstBytes) { + loop: + for (ByteOrderMark item : byteOrderMarks) { + int[] bytes = item.getBytes(); + int length = bytes.length; + for (int i = 0; i < length; i++) { + if (firstBytes[i] != bytes[i]) { + continue loop; + } + } + return item; + } + return null; + } + +} diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java new file mode 100644 index 00000000..0c68351b --- /dev/null +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java @@ -0,0 +1,112 @@ +package com.alibaba.excel.analysis.csv; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * Byte Order Mark (BOM) + *
+ * User in {@link BomBufferedInputStream} + * + * @author supalle + * @see Byte Order Mark (BOM) FAQ + * @see Apache CommonsIO ByteOrderMark + */ +public class ByteOrderMark implements Comparable { + + /** + * UTF-8 BOM. + */ + public static final ByteOrderMark UTF_8 = new ByteOrderMark(StandardCharsets.UTF_8, 0xEF, 0xBB, 0xBF); + + /** + * UTF-16BE BOM (Big-Endian). + */ + public static final ByteOrderMark UTF_16BE = new ByteOrderMark(StandardCharsets.UTF_16BE, 0xFE, 0xFF); + + /** + * UTF-16LE BOM (Little-Endian). + */ + public static final ByteOrderMark UTF_16LE = new ByteOrderMark(StandardCharsets.UTF_16LE, 0xFF, 0xFE); + + /** + * UTF-32BE BOM (Big-Endian). + * + * @since 2.2 + */ + public static final ByteOrderMark UTF_32BE = new ByteOrderMark(Charset.forName("UTF-32BE"), 0x00, 0x00, 0xFE, 0xFF); + + /** + * UTF-32LE BOM (Little-Endian). + * + * @since 2.2 + */ + public static final ByteOrderMark UTF_32LE = new ByteOrderMark(Charset.forName("UTF-32LE"), 0xFF, 0xFE, 0x00, 0x00); + + /** + * Unicode BOM character; external form depends on the encoding. + * + * @see Byte Order Mark (BOM) FAQ + * @since 2.5 + */ + public static final char UTF_BOM = '\uFEFF'; + + private final Charset charset; + private final int[] bytes; + + public ByteOrderMark(final Charset charset, final int... bytes) { + this.charset = Objects.requireNonNull(charset, "charset must be not null"); + if (bytes == null || bytes.length == 0) { + throw new IllegalArgumentException("bytes must be not empty"); + } + this.bytes = bytes; + } + + public Charset getCharset() { + return charset; + } + + public int[] getBytes() { + return bytes; + } + + public int length() { + return bytes.length; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ByteOrderMark that = (ByteOrderMark) o; + return Objects.equals(charset, that.charset) && Arrays.equals(bytes, that.bytes); + } + + @Override + public int hashCode() { + int result = Objects.hash(charset); + result = 31 * result + Arrays.hashCode(bytes); + return result; + } + + @Override + public String toString() { + return "ByteOrderMark{" + + "charset=" + charset + + ", bytes=[" + + Arrays.stream(bytes) + .mapToObj(Integer::toHexString) + .map(String::toUpperCase) + .map("0x"::concat) + .collect(Collectors.joining(",")) + + "]}"; + } + + @Override + public int compareTo(ByteOrderMark o) { + return o.length() - length(); + } +} diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java index 90ebe2b5..04aeac4e 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java @@ -1,15 +1,18 @@ package com.alibaba.excel.read.metadata.holder.csv; +import com.alibaba.excel.analysis.csv.BomBufferedInputStream; import com.alibaba.excel.read.metadata.ReadWorkbook; import com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder; import com.alibaba.excel.support.ExcelTypeEnum; - import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; +import java.io.IOException; +import java.nio.file.Files; + /** * Workbook holder * @@ -27,5 +30,34 @@ public class CsvReadWorkbookHolder extends ReadWorkbookHolder { super(readWorkbook); setExcelType(ExcelTypeEnum.CSV); this.csvFormat = CSVFormat.DEFAULT; + // CSV BOM + if (readWorkbook.getCharset() == null) { + BomBufferedInputStream bomBufferedInputStream = buildBomBufferedInputStream(); + setInputStream(bomBufferedInputStream); + setMandatoryUseInputStream(Boolean.TRUE); + try { + if (bomBufferedInputStream.hasByteOrderMark()) { + setCharset(bomBufferedInputStream.getByteOrderMark().getCharset()); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + private BomBufferedInputStream buildBomBufferedInputStream() { + BomBufferedInputStream bomBufferedInputStream; + try { + if (Boolean.TRUE.equals(getMandatoryUseInputStream())) { + bomBufferedInputStream = new BomBufferedInputStream(getInputStream()); + } else if (getFile() != null) { + bomBufferedInputStream = new BomBufferedInputStream(Files.newInputStream(getFile().toPath())); + } else { + bomBufferedInputStream = new BomBufferedInputStream(getInputStream()); + } + } catch (IOException e) { + throw new RuntimeException(e.getMessage()); + } + return bomBufferedInputStream; } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomData.java new file mode 100644 index 00000000..24d8ece8 --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomData.java @@ -0,0 +1,16 @@ +package com.alibaba.easyexcel.test.core.bom; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +public class BomData { + @ExcelProperty("姓名") + private String name; + @ExcelProperty("年纪") + private Integer age; +} diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomDataTest.java new file mode 100644 index 00000000..0c4ceacc --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomDataTest.java @@ -0,0 +1,53 @@ +package com.alibaba.easyexcel.test.core.bom; + +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.read.listener.ReadListener; +import org.apache.commons.compress.utils.Lists; +import org.junit.Assert; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +import java.io.File; +import java.util.List; +import java.util.Map; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class BomDataTest { + @Test + public void t01ReadAndWriteCsv() { + readCsv(TestFileUtil.readFile("bom" + File.separator + "bom_none.csv")); + readCsv(TestFileUtil.readFile("bom" + File.separator + "bom_utf8.csv")); + readCsv(TestFileUtil.readFile("bom" + File.separator + "bom_utf16be.csv")); + readCsv(TestFileUtil.readFile("bom" + File.separator + "bom_utf16le.csv")); + } + + private void readCsv(File file) { + EasyExcel.read(file, BomData.class, new ReadListener() { + + private final List dataList = Lists.newArrayList(); + + @Override + public void invokeHead(Map> headMap, AnalysisContext context) { + String head = headMap.get(0).getStringValue(); + Assert.assertEquals("姓名", head); + } + + @Override + public void invoke(BomData data, AnalysisContext context) { + dataList.add(data); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + Assert.assertEquals(dataList.size(), 10); + BomData bomData = dataList.get(0); + Assert.assertEquals("姓名0", bomData.getName()); + Assert.assertEquals(0, (long) bomData.getAge()); + } + }).sheet().doRead(); + } +} diff --git a/easyexcel-test/src/test/resources/bom/bom_none.csv b/easyexcel-test/src/test/resources/bom/bom_none.csv new file mode 100644 index 00000000..26d73e1f --- /dev/null +++ b/easyexcel-test/src/test/resources/bom/bom_none.csv @@ -0,0 +1,11 @@ +姓名,年纪 +姓名0,0 +姓名1,1 +姓名2,2 +姓名3,3 +姓名4,4 +姓名5,5 +姓名6,6 +姓名7,7 +姓名8,8 +姓名9,9 \ No newline at end of file diff --git a/easyexcel-test/src/test/resources/bom/bom_utf16be.csv b/easyexcel-test/src/test/resources/bom/bom_utf16be.csv new file mode 100644 index 0000000000000000000000000000000000000000..ad13f8716eaf7e8219509eb773a657cadfc3cec0 GIT binary patch literal 152 zcmX}fxei_@% literal 0 HcmV?d00001 diff --git a/easyexcel-test/src/test/resources/bom/bom_utf16le.csv b/easyexcel-test/src/test/resources/bom/bom_utf16le.csv new file mode 100644 index 0000000000000000000000000000000000000000..8e8eba909c4cbf4eafa298a5014930dd2c7a051f GIT binary patch literal 152 zcmX}fsS$uM00h9(%%qcu{7)a47^*<0ptM6jz#+JG``p(syTy5|X|Um&gN4IC&v`9y YL5p0}5|^~hWvy^Ut6bF@*R;-cyk{mG>i_@% literal 0 HcmV?d00001 diff --git a/easyexcel-test/src/test/resources/bom/bom_utf8.csv b/easyexcel-test/src/test/resources/bom/bom_utf8.csv new file mode 100644 index 00000000..358d5bac --- /dev/null +++ b/easyexcel-test/src/test/resources/bom/bom_utf8.csv @@ -0,0 +1,11 @@ +姓名,年纪 +姓名0,0 +姓名1,1 +姓名2,2 +姓名3,3 +姓名4,4 +姓名5,5 +姓名6,6 +姓名7,7 +姓名8,8 +姓名9,9 \ No newline at end of file From bebbb1515f9b8aca9d003102d7bdd4358c3f5f8d Mon Sep 17 00:00:00 2001 From: supalle Date: Sat, 4 Mar 2023 14:31:35 +0800 Subject: [PATCH 06/53] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=BB=A1=E8=B6=B3pmd=E7=BC=96=E7=A0=81=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../analysis/csv/BomBufferedInputStream.java | 1 - .../excel/analysis/csv/ByteOrderMark.java | 16 ++++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java index 9a53520d..c24a6e0c 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java @@ -66,7 +66,6 @@ public class BomBufferedInputStream extends BufferedInputStream { reset(); if (byteOrderMark != null) { - // read(new byte[byteOrderMark.length()]); skip(byteOrderMark.length()); } initialized = true; diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java index 0c68351b..1ed078cf 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java @@ -46,14 +46,6 @@ public class ByteOrderMark implements Comparable { */ public static final ByteOrderMark UTF_32LE = new ByteOrderMark(Charset.forName("UTF-32LE"), 0xFF, 0xFE, 0x00, 0x00); - /** - * Unicode BOM character; external form depends on the encoding. - * - * @see Byte Order Mark (BOM) FAQ - * @since 2.5 - */ - public static final char UTF_BOM = '\uFEFF'; - private final Charset charset; private final int[] bytes; @@ -79,8 +71,12 @@ public class ByteOrderMark implements Comparable { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } ByteOrderMark that = (ByteOrderMark) o; return Objects.equals(charset, that.charset) && Arrays.equals(bytes, that.bytes); } From a5dc38e632ee0abb2f8fbf172e8f16d686a8a643 Mon Sep 17 00:00:00 2001 From: Joyfully <584974245@qq.com> Date: Mon, 20 Mar 2023 14:11:10 +0800 Subject: [PATCH 07/53] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/alibaba/excel/read/listener/ReadListener.java | 2 +- .../com/alibaba/easyexcel/test/demo/read/DemoDataListener.java | 2 +- .../com/alibaba/easyexcel/test/demo/web/UploadDataListener.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ReadListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ReadListener.java index b56f8a56..79899153 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ReadListener.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ReadListener.java @@ -36,7 +36,7 @@ public interface ReadListener extends Listener { /** * When analysis one row trigger invoke function. * - * @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()} + * @param data one row value. It is same as {@link AnalysisContext#readRowHolder()} * @param context analysis context */ void invoke(T data, AnalysisContext context); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoDataListener.java index a6ddaf95..7815d374 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoDataListener.java @@ -48,7 +48,7 @@ public class DemoDataListener implements ReadListener { /** * 这个每一条数据解析都会来调用 * - * @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()} + * @param data one row value. It is same as {@link AnalysisContext#readRowHolder()} * @param context */ @Override diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDataListener.java index 2096cd4d..183bc140 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDataListener.java @@ -44,7 +44,7 @@ public class UploadDataListener implements ReadListener { /** * 这个每一条数据解析都会来调用 * - * @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()} + * @param data one row value. It is same as {@link AnalysisContext#readRowHolder()} * @param context */ @Override From 8cb0447f8cff02b7261469e70bf90ffc6b438858 Mon Sep 17 00:00:00 2001 From: zhouyao Date: Wed, 12 Apr 2023 10:24:28 +0800 Subject: [PATCH 08/53] fix: fix the spring boot Application EasyexcelApplication cannot start --- easyexcel-test/pom.xml | 5 +++++ pom.xml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/easyexcel-test/pom.xml b/easyexcel-test/pom.xml index 73fc20d7..d59ff594 100644 --- a/easyexcel-test/pom.xml +++ b/easyexcel-test/pom.xml @@ -46,6 +46,11 @@ junit test + + commons-logging + commons-logging + test + diff --git a/pom.xml b/pom.xml index cceb0f94..d495370b 100644 --- a/pom.xml +++ b/pom.xml @@ -157,6 +157,11 @@ junit 4.13.2 + + commons-logging + commons-logging + 1.2 + From 5e1e457b9011899523edd8f7fd5e92d917d33fc8 Mon Sep 17 00:00:00 2001 From: ltxlouis Date: Fri, 14 Apr 2023 16:15:01 +0800 Subject: [PATCH 09/53] remove duplicate BigIntegerStringConverter --- .../com/alibaba/excel/converters/DefaultConverterLoader.java | 1 - 1 file changed, 1 deletion(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java index 1b04d240..79236d16 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java @@ -154,7 +154,6 @@ public class DefaultConverterLoader { putWriteStringConverter(new LongStringConverter()); putWriteStringConverter(new ShortStringConverter()); putWriteStringConverter(new StringStringConverter()); - putWriteStringConverter(new BigIntegerStringConverter()); } /** From baf7d0bd5b6049e9306297826d6ed680f8b0fd7b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:38:52 +0000 Subject: [PATCH 10/53] Bump spring-core from 5.3.15 to 5.3.27 Bumps [spring-core](https://github.com/spring-projects/spring-framework) from 5.3.15 to 5.3.27. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v5.3.15...v5.3.27) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cceb0f94..2ade7961 100644 --- a/pom.xml +++ b/pom.xml @@ -133,7 +133,7 @@ org.springframework spring-core - 5.3.15 + 5.3.27 From 1635bb814742786e94a3e0b72e8588aa64617ae6 Mon Sep 17 00:00:00 2001 From: acc8226 Date: Thu, 20 Apr 2023 17:55:29 +0800 Subject: [PATCH 11/53] Update PageReadListener.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Incorrect words: Defuault -> Default --- .../java/com/alibaba/excel/read/listener/PageReadListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java index b97db357..f2ab4351 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java @@ -15,7 +15,7 @@ import org.apache.commons.collections4.CollectionUtils; */ public class PageReadListener implements ReadListener { /** - * Defuault single handle the amount of data + * Default single handle the amount of data */ public static int BATCH_COUNT = 100; /** From 5dc6196e509db434d30beaaebbd5757ace25e055 Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Fri, 21 Apr 2023 11:47:55 +0800 Subject: [PATCH 12/53] fix utf decode --- .../sax/SharedStringsTableHandler.java | 57 +++++++++++++++++- .../easyexcel/test/demo/rare/ReadTest.java | 41 +++++++++++++ .../easyexcel/test/util/TestFileUtil.java | 43 +++++++++++++ .../test/resources/temp/utfdecode/demo.xlsx | Bin 0 -> 8762 bytes 4 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java create mode 100644 easyexcel-test/src/test/resources/temp/utfdecode/demo.xlsx diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java index 203db6c7..169429de 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java @@ -1,10 +1,12 @@ package com.alibaba.excel.analysis.v07.handlers.sax; +import com.alibaba.excel.cache.ReadCache; +import com.alibaba.excel.constant.ExcelXmlConstants; import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler; -import com.alibaba.excel.cache.ReadCache; -import com.alibaba.excel.constant.ExcelXmlConstants; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Sax read sharedStringsTable.xml @@ -13,6 +15,8 @@ import com.alibaba.excel.constant.ExcelXmlConstants; */ public class SharedStringsTableHandler extends DefaultHandler { + private static final Pattern UTF_PATTTERN = Pattern.compile("_x([0-9A-Fa-f]{4})_"); + /** * The final piece of data */ @@ -86,7 +90,7 @@ public class SharedStringsTableHandler extends DefaultHandler { if (currentData == null) { readCache.put(null); } else { - readCache.put(currentData.toString()); + readCache.put(utfDecode(currentData.toString())); } break; case ExcelXmlConstants.SHAREDSTRINGS_RPH_TAG: @@ -109,4 +113,51 @@ public class SharedStringsTableHandler extends DefaultHandler { } currentElementData.append(ch, start, length); } + + /** + * from poi XSSFRichTextString + * + * @param value the string to decode + * @return the decoded string or null if the input string is null + *

+ * For all characters which cannot be represented in XML as defined by the XML 1.0 specification, + * the characters are escaped using the Unicode numerical character representation escape character + * format _xHHHH_, where H represents a hexadecimal character in the character's value. + *

+ * Example: The Unicode character 0D is invalid in an XML 1.0 document, + * so it shall be escaped as _x000D_. + *

+ * See section 3.18.9 in the OOXML spec. + * @see org.apache.poi.xssf.usermodel.XSSFRichTextString#utfDecode(String) + */ + static String utfDecode(String value) { + if (value == null || !value.contains("_x")) { + return value; + } + + StringBuilder buf = new StringBuilder(); + Matcher m = UTF_PATTTERN.matcher(value); + int idx = 0; + while (m.find()) { + int pos = m.start(); + if (pos > idx) { + buf.append(value, idx, pos); + } + + String code = m.group(1); + int icode = Integer.decode("0x" + code); + buf.append((char) icode); + + idx = m.end(); + } + + // small optimization: don't go via StringBuilder if not necessary, + // the encodings are very rare, so we should almost always go via this shortcut. + if (idx == 0) { + return value; + } + + buf.append(value.substring(idx)); + return buf.toString(); + } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java new file mode 100644 index 00000000..c1e614ea --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java @@ -0,0 +1,41 @@ +package com.alibaba.easyexcel.test.demo.rare; + +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.junit.Assert; +import org.junit.Test; + +import java.io.File; +import java.util.List; +import java.util.Map; + +/** + * + * 记录一些不太常见的案例 + * @author gxz gongxuanzhang@foxmail.com + **/ +public class ReadTest { + + + /** + * 当excel有需要转义的 如x005特殊符号时需要通过utf decode解码 + * + **/ + @Test + public void readX005() throws Exception{ + String fileName = TestFileUtil.pathBuild().sub("temp").sub("utfdecode").sub("demo.xlsx").getPath(); + XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fileName); + XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0); + XSSFRow row = xssfSheet.getRow(0); + String poiValue = row.getCell(0).getStringCellValue(); + List> list = EasyExcel.read(fileName) + //.useDefaultListener(false) + .sheet(0) + .headRowNumber(0).doReadSync(); + Map easyExcelRow = list.get(0); + Assert.assertEquals(easyExcelRow.get(0).toString(),poiValue); + } +} diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java index d4665b44..b0ab7ebb 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java @@ -1,7 +1,11 @@ package com.alibaba.easyexcel.test.util; +import org.springframework.util.CollectionUtils; + import java.io.File; import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; public class TestFileUtil { @@ -14,6 +18,10 @@ public class TestFileUtil { return TestFileUtil.class.getResource("/").getPath(); } + public static TestPathBuild pathBuild() { + return new TestPathBuild(); + } + public static File createNewFile(String pathName) { File file = new File(getPath() + pathName); if (file.exists()) { @@ -33,4 +41,39 @@ public class TestFileUtil { public static File readUserHomeFile(String pathName) { return new File(System.getProperty("user.home") + File.separator + pathName); } + + + /** + * build to test file path + **/ + public static class TestPathBuild { + private TestPathBuild() { + subPath = new ArrayList<>(); + } + + private final List subPath; + + public TestPathBuild sub(String dirOrFile) { + subPath.add(dirOrFile); + return this; + } + + public String getPath() { + if (CollectionUtils.isEmpty(subPath)) { + return TestFileUtil.class.getResource("/").getPath(); + } + if (subPath.size() == 1) { + return TestFileUtil.class.getResource("/").getPath() + subPath.get(0); + } + StringBuilder path = new StringBuilder(TestFileUtil.class.getResource("/").getPath()); + path.append(subPath.get(0)); + for (int i = 1; i < subPath.size(); i++) { + path.append(File.separator).append(subPath.get(i)); + } + return path.toString(); + } + + } + + } diff --git a/easyexcel-test/src/test/resources/temp/utfdecode/demo.xlsx b/easyexcel-test/src/test/resources/temp/utfdecode/demo.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0b29141d21d2234296ed280cc89af3b5bed8c181 GIT binary patch literal 8762 zcmai41yq#X)+Pt(?vR!)>28D}hVD-3?vU;d0i`9Sq&ua%q)S4O9zbb+(0jk&e)s-o zE#`%p9dn+2_C9;<2M`b%1_9!6h01>wetiCW!9VjPA zn72N>dktU+pEq%2FaR1L(n#L%#T9<`0Nx`rzCXM;c5OXH*DxzwnU$oE&>qa6=**!H zXH4cyAyV7-{+KiRc|1io;QMH$5_R^lR(gH*0Bp!M8HrKve1_-_V6#QFlLqJjG6%}( z&yvvg$IgEHS>HES_*Pb2p!IxfoVRo&{{4>-jeWxAH=ogieY$FM2#!m1iiQ0k6hb=$ z#Jc3TXR#sj)5O|*H@J7z>n<*RE@A%;GcM=+Tcrn>tsh`U|0~SKc8;cxI7cT;$aJ${ zg&e`I=4`gfO(MsSyJlC>hX!ExG{?QS?c}7Du37YQKiaq?C^+EcI}`1f1K)q+yXSet znAa0-FKL1&7hVM2!tlf79+5!G&;^FXs1u`y4g01A913H^X|-&PEFR*|FEs|OP`I!O zuCg^e3+}6IQ5kc>-MSb=ykW_okbkaQ&Ngg)O|F0}4ANNx@V{MhT7usA@k-q51D2G@ zwb>pdDQpMd1tol`)F`8=WtCdpDBF9t8%LiuPQCf- z-p0%KNcU<`o~b6Afl;EIobryKOtV?8Eevd0X>-=JK3dw{_wh;S;7KmQ;-l&q)RDGZ zzp$DQN%=`5yFu;{SYn4$_ln-oe-D7g#d90lhX9~H1OW4I0dR40wzGK*L4Le0@OKFA z#rl2H+2v+kYl!#ygj+x$H+m|$deOur>I{^V_IIp>?(5NdBrDzBr4jA8)ScTC>h*s235TiA2+o4$Fw&;t{st zR7op@TVz3ML!I+ObFMJ0(5(j4MUshB5(BXI zNX#V)jLAIRF)-`zeQR_I@vFp80sXPleX*!-e=2;bqzEc%{pcRQ_1<5(ZNgUlBuj`> zJ&QY%MwcSm4Rm52cGKp2Uryvb*M|au&)T4Ig7Qfp0bLbNt#|n68qMUD0aXH_EBOyd zlSC3t3c=0GvPvaBK~{!tZEo*HOIWK46dWRXO2{bj$>)5_eQ5{99+>)=o5HQ5o}-lI zh5g|b4UOaGwFrV&I4`%#Qa|Xrdb~Ki+np*w%)Lh%8mtsLQx{)ScG9+C7c6u&7kN{` z-_2qo_Wb3Rp2~aVB8_JqGi15-R^bV=rVAZnXfE>>>0cW>ak9%Uz6D^WcD1u3oeZ1N z)W;eKld(I$cprVe>e>DrvmGNT_A{;FheU*PbTtE6Bh!;HO-P3l(A$b1IyQ+++hmmh zEf1Ck@OHgzWnPKO57?W-Q08nmVvMGKTZO7Vls&c!|A`;8KC%sMIhcoA?s+{`q-mB& zN)^`P+<8f_c0P>)9VjIt1dUQ_<&s*LI=S#&7bMKG^SM0g))-_75~AA_cBDq@NM0{h z&rZxhCl6O!jcOe^xLV99TPF%T_UzV|+(Z5MQ}uX#J)A0M3sW1@C)by}bu{%cECd8S z{_nK@L+qFEucLCH3A7{RLTkg_@zdCEjW^jt$B&2Bj%|p}fQe5am$H1jVES1Xfzni} zo|Fe076I#3qz(dB>lp|Oc^m?HLF^u=OZjT*`2?9;EjbmPZ$~J5*nVKj^~i7^{vp@q z_rV!B_;VCi+@O5McE{pgRiVH_E7(^LAvDOnz!XwTMFl$h-JxQ)wM%sC@2{nrbX5| ziI8%DN6?#hf?XaE(d`M_hdI+S*76+gKyFzq#iF zqHo9k3vpdBVo+1vk{f*8pidRr667U2EhA1?)61kC0 zBuECG&+&C9+=*G3_&<%={ad|y)aA+Jn`45w453D&Jm+?`*LT@@3=CbjOI4;X*)UQ4 zH;r0!=zG^&NMAa)e&UwGKIB+@mF4ygCh0))6<((`#yb>@=*w)G1VLS~Ng~R#VWuF7 zsm`xejzY{c2#DEgDzJ5uB-TY*zGVp11~8%2;toaMlaf94bajU#OV652wCJ;uj<~?s zl||0V4!V2-9L?6n8M%`<@Wzevl+I?(sF4sE?f3S6$@9G_M}NcWUtY;V&Hq{7UW9(vw6Puxb0slg{|^BO&RO+bUx<3~r9lqR)K zKMICJiajH58Udxa(V=2OjW@?_E)x3;L2jcer!d-zrlVY3vRgC})-n?tNwhubNEIOk z-PAl4jdua|X!F9&je+Sv0qD?|h{QvTcdH(q;geQgE(RV3B(po6CZ`zG5hWs-c4>Ql zZ_-ftr4pzj$C_wDItmbh zd^jLU=M-YWGtkzo^{VC%@n;Y=~JU&ZFKHFv+U ze!X2Q48XE^TSik^9{g5-VdV?5Rb1_Wkn#X{>Ml6LOIj}zsH@~`typtzknr{LF2iYT zt980}Bru0+`Q=jl?i^!dm0k)}_aTqZ)QZi3-O9u)K@~fg*R|c4r*0wvH9Fqg>2z^* z0nZ~e#ldTgg&$sHE-$6!o5wYmOunMs7@n)--e{X)Hy3mtu`55fiyJV{XLjdID#*ej zImxk6jlfk_du6GzPt0d0`a|Z+y4IA^Pr!ux5!5St#YCzs?Zw?dI=B3zJL`S-irb^D zPk#2gO+Q+#W(W7Sz`DB}o%KSR!26YNRonN?9*Jz1ce>I{!B>W+(+zB_yR-SJ4SW7g z_?Pq!cSgp_jM#nyX=%15ROR9Zl=((D0P}EfpolXU7a)chR#TC5aC30GcgJQ|uMg^m z_Vc_zpQFwIG@eKj{q$`{&ibmu)!FjYH|AYkFJd>Col|(#Xq~({#6zO=x{ZWLDt$>= zjIBK&+d-Ry0YukeOQ~xgTXT6Dr8SwpTm52!i*CE>DpQ}vi&T*#PY#OFt@6mBMis9n zN@p?{kO9;?6+s60wvRe6P~X6MX3`rl%}@qO>k6|k@!kC2z;>zV&g|6=Vbygs0W@a& zVW|x>MM`wb`9{tzW?aCHvTt2KbLvR8M;#@DTWWrzmAw%n31e%$!b%^RCf>5Qrli@^Ud+0%5yTlRM0#cfr+$bYc;-nz zRiyz$&dc*Nbuw<>@CdQmJFdkdTIE>^)f)=I$tnVoCm|lKxbTHy2dfoZ!%+0GU5iI9 za~>RTe|P1&2;eZ`SeQwU>(We)973ofDL~7VHpAOGx5T`gmaHydCroDJFunx8``kK& z3!PXuE{k1Ss{S$BGQZd&`TZsZ*Ejm-A|=bC%d;-WE_q5;>;!UhWuSc~)-S_fT$|IB zb*$)nRXGyc6VA#iGz6>ss5F{Ysj|GmC5?3Yp&t1=#{+$8DixG}HMDOvi!3s<$&Ab@vl2Bv%kXG+R7Tz%#%&uvp8~0ZF^6T3w zYuYqGnzMNX2E5{Mvm>N`M?4~p-bl1)q-Gge8>R&YBCVTOIzeX~6otxIW$B^`jfYi7 z2yGdB&!NGaI{J<}l&U+qI>k6K_ZC8;E3pK>szyk}mF6Ggm4>Rz_5#&XUpBq$EiVvv z;Q~$SK=NXBbofw0Bp89 zJz?pp*A$hy!L7(WDi|J0{xJoqGF_OFDTzLrIH-+x4<{uC71c zkV86ku(W`fx09!HQpNF0#N;K+wHpiAM{&kI^=6W1i2EZexAmmmN-AN?gb&5V@FF}6 zPluGX;*3i1ltxkoCF`Cv2wXHLOaUq-je0NWfpdXPwk z{XCsDvsBYC{kHlNM+S5&50-k6x(Z^0c~G|Z0?m*>lC~{euw{vo23M{IeegkC{0sVE zpL7?A?}d`zCz1&jq@mzHS~y(!A}N)V`+uj!rd=&bn-&iQ)AE9S1{^<9)4j6iUfl@i zEA(y+6GaZ~nPz>Ri!|#L;|yQXe*N*pf-JLT-S^JLeb?Z)1QA>b9z!7gKGL9xs)Gs} z)&i@q{QT+^*;VrGMOQUi{5sEIIzqi@`?rSeMNr&;Bvg}=SmvrG>Fv_N{wgbqfyl(_ z4~aT_P_h07xZbfxL&H&K%)7WnZk-lflFTjEVIaEX3znyLx9#L-())b<@d|| z=conkLh1ZI-aqDFRJ*muWnY4Cp}&w(t2V{ck4i{?g}OX&B5R9P@yD+b#`VXE%A_RA z{kb}Y%;f{qJErH&;^9stLzz#N`({FdR1r8y`1#T^QIGO#?j%n zpB+LESWf(BbHnm?-k#u8>Fpf2p+YDOe>n0PkLgY(0?5GX>-M|td1dOvP-0nJ7|QSg z64=<#Eb7l4n-^BpDN>o_EkcS6FH_|^$zOD{r3+v03dI)uyeE_?Komz0zbCOHDobQm zn7idKF*u5N_4(V+LOY3U|FQ;M8IS7uhHnpkPzs3&)T5?tO$_546DBwm&k)p$g00OI z?%6!<1xP3?k@Q7D)M{#+;+_3(wyeHd-_Gho77RPK@ppPXgBrq|fCt~CmxH&8=}ah! zN=w^B2s?_IoOO+0Qb`Qh%#^Wt9Z^_JTw?(mhT*-hBpO9=n9zzVSzt5=3`9vrDG1y{ z7>+%1%Z5!&w26)K;OAkg@WpHJCO_8|oRzbH?UjP(lZ*I27G*PEJr*frV|Ny z8?ys^JieEq9zA;$?!kaNpz*BrK>OT$30J+FvuT;)ie>5R5=C7rwfef*5-l$)FKxS& zWXJ2bajcu_2ew2iHI4dpgy{ma_&m^dt#B1r+=2e{FSq>`%QY=S+HK)vZKD_(hLEF> zliG=Otp;{Jt7kPKP6G;qC6grg)qir{qyD{*Eo|0G$b0BtyB~fYr}qzo4krskM^h7J zXUEsJ=D*rmj+jn_E*3QLqkwy~ALZe&5|q(!5-lHbnK2g1klEiYEX&+_ZFCNGY_JZ` z-D2^b_xg+FVyFS35sGD8vd!V^_g;U3?fF{#LzkRkJrK!@D@)T%u@R^vNbu%v2QLW%ao`D`RV|v|;Fy6~Efn z_jOEcGi&h7*V4P!843+grZ?95n)gHx)4qYn!R+r%Jx&IV?Ch+54fzy@jKR2q|gw8V*){wi(TpelPKnr=UCoy8JBmW~sP#Z)+DHct3xYz7$pyTnI! zTZM?!<2yOLrt2dA*XUE#D)6ST$^qqlKtmJ;qMHqo*WU$YtD)R)=^crmAz9WVT)P*e z#+?t!%(mw)xP&vb3`JVcZTW3WP1JBnn)OAlz)?6lx`okuCV@e8GF>v;6x|+W=uMh% zoIwuuobPZ?9lqWmp8q->|2$#^JOHWhXlng*wCcs}+H(K!+3Ldt9Ptksrbo%LgfW@V zENH!tB+qu6oEtX!yfZWTzMP5An^f8Racay2&4ad95k-dSCb-zN%k6io-X_h2%cOd& z1u-oFE{XxdcKxnxipSpW8p{E%N?T{3Jyh(wV4A;!jjn?NxA~J6m?-0Qy_Lq?QrCN_>WkbsTn7pm*L}JKDJf0KhZm=ps0D!d*o7hYU*28XZ(bA&Cn~}AgbKGdrG#x&zmV8f*ks<9Knnq-TvRn<3GWHRE>;DFli z>a+TDG_#%G>L6tWwI970T3l{CnntCzG-d&r@X#PJU2#qW+E9*AnX|)ej_V>Jk)vK! z(jOhwJ)hG|0Z!LI(>lPLWE+y`)l$zI*wIEp19nwd&r>7{v{1hg+eCXNejDSxJ%8i4 zUi@Q4c;Wg5DAXZt^S;$swH9SH_xh0aIQf}ewA_vm&wx8+FXv1@0B1`!Oyr^a*TD|y zlh<=9NIfgN7)d{2;OpY?N$}*2)JEz_M=DH>nI;7fJJ7~k19@@rS}z>7o+NnDiI$W3 zLvkZOjA$QO7i}>+TW3>SXMGh9ds8Rf$0RRH8j^=%#R~aJ-PZj<`=zqIVU(f4x@j@x zSLo><9qeZ*nE}T?GHDHj)?z{!%JU%Wof31xa5Ch9nx1^{FABU>S8sb7V5> zu=8r=V`>GiDWz#4a}x1)sxZjXWvZWfZBPb?sPWt4)Rm@(qeZ2V$1Arve}AK73y-b3 z%`vz0hRY=IBrnKy+pVMSFgiC}ON14NwG{!#*#LGV@)4E~DQQ=YnLC>*P7x+R1fr{q z*Odw<`%{upBMW8Tn*g7$J6<5`y&MHJIoh2M@FOe`n0!ojxr=j~c(7qCce2Z=GK$^S_)uvH`!>BVYZv{z7g4-QQDk z`%(C}zZZX1`xn*y6r!h`?Vs8)4@deBr~hVfpQ=A)9RE~DeIU2~RR4p2{9l`X(D>JS z-1KXhf6;7@+x_Q|{2e78!oL)#r(g7GC3|%A8zqCks{Kb@dur!ti}I(PG2DM{Se{yV zI;{KC0^Gyw?y=?hV|4ew!20{%+aE5(KWL$+9-s0@e|p^htJ9mw*U2|ADPkL>oLL+za#vp{0C3^_p|+!DSg!a9ksgu(EXD)1p#3n`-6x7K|qIq Mdype0dHn1D09Q%wxBvhE literal 0 HcmV?d00001 From b835619942b86fba013c054a2a37ef823e33897a Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Fri, 21 Apr 2023 11:48:58 +0800 Subject: [PATCH 13/53] fix utf decode --- .../alibaba/easyexcel/test/demo/rare/ReadTest.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java index c1e614ea..2d8eb1d7 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java @@ -8,13 +8,12 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.Assert; import org.junit.Test; -import java.io.File; import java.util.List; import java.util.Map; /** - * * 记录一些不太常见的案例 + * * @author gxz gongxuanzhang@foxmail.com **/ public class ReadTest { @@ -22,20 +21,18 @@ public class ReadTest { /** * 当excel有需要转义的 如x005特殊符号时需要通过utf decode解码 - * **/ @Test - public void readX005() throws Exception{ + public void readX005() throws Exception { String fileName = TestFileUtil.pathBuild().sub("temp").sub("utfdecode").sub("demo.xlsx").getPath(); XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fileName); XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0); XSSFRow row = xssfSheet.getRow(0); String poiValue = row.getCell(0).getStringCellValue(); - List> list = EasyExcel.read(fileName) - //.useDefaultListener(false) + List> list = EasyExcel.read(fileName) .sheet(0) .headRowNumber(0).doReadSync(); Map easyExcelRow = list.get(0); - Assert.assertEquals(easyExcelRow.get(0).toString(),poiValue); + Assert.assertEquals(easyExcelRow.get(0).toString(), poiValue); } } From 430a53ae8c5c2d291da973733d72638160c2b653 Mon Sep 17 00:00:00 2001 From: "jipengfei.jpf" Date: Thu, 27 Apr 2023 23:19:56 +0800 Subject: [PATCH 14/53] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E4=BD=9C=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 004f12c7..9267ab80 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,9 @@ EasyExcel [![License](http://img.shields.io/:license-apache-brightgreen.svg)](http://www.apache.org/licenses/LICENSE-2.0.html) [![](https://img.shields.io/badge/EasyExcel-%E6%9F%A5%E7%9C%8B%E8%B4%A1%E7%8C%AE%E6%8E%92%E8%A1%8C%E6%A6%9C-orange)](https://opensource.alibaba.com/contribution_leaderboard/details?projectValue=easyexcel) +# 🔥作者最新开作品[Chat2DB](https://github.com/alibaba/Chat2DB) +一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) + # JAVA解析Excel工具 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。 From b7b7a204bc905fa0145eccfba4dab802308a0773 Mon Sep 17 00:00:00 2001 From: jipengfei-jpf <1558143046@qq.com> Date: Thu, 27 Apr 2023 23:22:37 +0800 Subject: [PATCH 15/53] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 004f12c7..968eaa5a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +# 🔥作者最新开作品[Chat2DB](https://github.com/alibaba/Chat2DB) +一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) + EasyExcel ====================== [![Build Status](https://github.com/alibaba/easyexcel/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/alibaba/easyexcel/actions/workflows/ci.yml?query=branch%3Amaster) From de87f4b331ba1fae1602d23203fad7f78f82638b Mon Sep 17 00:00:00 2001 From: jipengfei-jpf <1558143046@qq.com> Date: Thu, 27 Apr 2023 23:23:08 +0800 Subject: [PATCH 16/53] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 968eaa5a..47b7e63a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 🔥作者最新开作品[Chat2DB](https://github.com/alibaba/Chat2DB) +# 🔥作者最新开源作品[Chat2DB](https://github.com/alibaba/Chat2DB) 一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) EasyExcel From 70ec81455c8763f0941e61d47960f8252e57f8ae Mon Sep 17 00:00:00 2001 From: "jipengfei.jpf" Date: Fri, 28 Apr 2023 09:28:12 +0800 Subject: [PATCH 17/53] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E4=BD=9C=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9267ab80..b0c56c02 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ EasyExcel [![License](http://img.shields.io/:license-apache-brightgreen.svg)](http://www.apache.org/licenses/LICENSE-2.0.html) [![](https://img.shields.io/badge/EasyExcel-%E6%9F%A5%E7%9C%8B%E8%B4%A1%E7%8C%AE%E6%8E%92%E8%A1%8C%E6%A6%9C-orange)](https://opensource.alibaba.com/contribution_leaderboard/details?projectValue=easyexcel) -# 🔥作者最新开作品[Chat2DB](https://github.com/alibaba/Chat2DB) -一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) +# 🔥作者最新开项目[Chat2DB](https://github.com/alibaba/Chat2DB) +Chat2DB是一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) # JAVA解析Excel工具 From 9acea1f362c2e02f758a6d8abcfb4a6401cf4e97 Mon Sep 17 00:00:00 2001 From: "jipengfei.jpf" Date: Fri, 28 Apr 2023 09:29:31 +0800 Subject: [PATCH 18/53] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E4=BD=9C=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 034b188c..47bffc6c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ EasyExcel [![License](http://img.shields.io/:license-apache-brightgreen.svg)](http://www.apache.org/licenses/LICENSE-2.0.html) [![](https://img.shields.io/badge/EasyExcel-%E6%9F%A5%E7%9C%8B%E8%B4%A1%E7%8C%AE%E6%8E%92%E8%A1%8C%E6%A6%9C-orange)](https://opensource.alibaba.com/contribution_leaderboard/details?projectValue=easyexcel) -# 🔥作者最新开项目[Chat2DB](https://github.com/alibaba/Chat2DB) +# 🔥作者最新开源项目[Chat2DB](https://github.com/alibaba/Chat2DB) Chat2DB是一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) # JAVA解析Excel工具 From d96676827b7538d7720c61bbaf22b43c3a34b90d Mon Sep 17 00:00:00 2001 From: "jipengfei.jpf" Date: Fri, 28 Apr 2023 09:32:32 +0800 Subject: [PATCH 19/53] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E4=BD=9C=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 47bffc6c..efee515e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# 🔥作者最新开源作品[Chat2DB](https://github.com/alibaba/Chat2DB) -一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) +# 🔥作者最新开源项目[Chat2DB](https://github.com/alibaba/Chat2DB) +Chat2DB是一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) EasyExcel ====================== @@ -8,9 +8,6 @@ EasyExcel [![License](http://img.shields.io/:license-apache-brightgreen.svg)](http://www.apache.org/licenses/LICENSE-2.0.html) [![](https://img.shields.io/badge/EasyExcel-%E6%9F%A5%E7%9C%8B%E8%B4%A1%E7%8C%AE%E6%8E%92%E8%A1%8C%E6%A6%9C-orange)](https://opensource.alibaba.com/contribution_leaderboard/details?projectValue=easyexcel) -# 🔥作者最新开源项目[Chat2DB](https://github.com/alibaba/Chat2DB) -Chat2DB是一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) - # JAVA解析Excel工具 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。 From 8fb759ab1f592c26cacec3b230bd8110e5d88b85 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 28 Apr 2023 16:50:07 +0800 Subject: [PATCH 20/53] =?UTF-8?q?*=20=E8=AF=BBcsv=E4=BC=9A=E5=BF=BD?= =?UTF-8?q?=E7=95=A5BOM=E6=95=B0=E6=8D=AE=20[Issue=20#3137](https://github?= =?UTF-8?q?.com/alibaba/easyexcel/issues/3137)=20*=20=E8=A7=A3=E5=86=B3csv?= =?UTF-8?q?=E7=94=A8office=E6=89=93=E5=BC=80=E4=B9=B1=E7=A0=81=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E5=86=99csv=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=B8=A6=E4=B8=8ABOM=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- easyexcel-core/pom.xml | 4 + .../analysis/csv/BomBufferedInputStream.java | 90 --------------- .../excel/analysis/csv/ByteOrderMark.java | 108 ------------------ .../analysis/csv/CsvExcelReadExecutor.java | 26 +++-- .../excel/enums/ByteOrderMarkEnum.java | 51 +++++++++ .../alibaba/excel/metadata/csv/CsvSheet.java | 14 +++ .../excel/metadata/csv/CsvWorkbook.java | 17 ++- .../holder/csv/CsvReadWorkbookHolder.java | 31 +---- .../com/alibaba/excel/util/WorkBookUtil.java | 4 +- .../write/builder/ExcelWriterBuilder.java | 9 ++ .../excel/write/metadata/WriteWorkbook.java | 7 ++ .../metadata/holder/WriteWorkbookHolder.java | 13 +++ .../easyexcel/test/core/bom/BomData.java | 3 +- .../easyexcel/test/core/bom/BomDataTest.java | 90 ++++++++++++++- .../src/test/resources/bom/bom_none.csv | 11 -- .../src/test/resources/bom/bom_utf16be.csv | Bin 152 -> 0 bytes .../src/test/resources/bom/bom_utf16le.csv | Bin 152 -> 0 bytes .../src/test/resources/bom/bom_utf8.csv | 11 -- .../src/test/resources/bom/no_bom.csv | 11 ++ .../src/test/resources/bom/office_bom.csv | 11 ++ pom.xml | 7 +- update.md | 5 + 22 files changed, 256 insertions(+), 267 deletions(-) delete mode 100644 easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java delete mode 100644 easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java create mode 100644 easyexcel-core/src/main/java/com/alibaba/excel/enums/ByteOrderMarkEnum.java delete mode 100644 easyexcel-test/src/test/resources/bom/bom_none.csv delete mode 100644 easyexcel-test/src/test/resources/bom/bom_utf16be.csv delete mode 100644 easyexcel-test/src/test/resources/bom/bom_utf16le.csv delete mode 100644 easyexcel-test/src/test/resources/bom/bom_utf8.csv create mode 100644 easyexcel-test/src/test/resources/bom/no_bom.csv create mode 100644 easyexcel-test/src/test/resources/bom/office_bom.csv diff --git a/easyexcel-core/pom.xml b/easyexcel-core/pom.xml index 9cfabb2a..70c1e6fe 100644 --- a/easyexcel-core/pom.xml +++ b/easyexcel-core/pom.xml @@ -40,5 +40,9 @@ org.ehcache ehcache + + commons-io + commons-io + diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java deleted file mode 100644 index c24a6e0c..00000000 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/BomBufferedInputStream.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.alibaba.excel.analysis.csv; - - -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * This class is used to wrap a stream that includes an encoded {@link ByteOrderMark} as its first bytes. - * - * @author supalle - * @see Byte Order Mark (BOM) FAQ - * @see Apache CommonsIO BOMInputStream - */ -public class BomBufferedInputStream extends BufferedInputStream { - public final static List DEFAULT_BYTE_ORDER_MARKS = new ArrayList<>(); - - static { - DEFAULT_BYTE_ORDER_MARKS.add(ByteOrderMark.UTF_8); - DEFAULT_BYTE_ORDER_MARKS.add(ByteOrderMark.UTF_16BE); - DEFAULT_BYTE_ORDER_MARKS.add(ByteOrderMark.UTF_16LE); - DEFAULT_BYTE_ORDER_MARKS.add(ByteOrderMark.UTF_32BE); - DEFAULT_BYTE_ORDER_MARKS.add(ByteOrderMark.UTF_32LE); - } - - private boolean initialized; - private ByteOrderMark byteOrderMark; - private final List byteOrderMarks; - - public BomBufferedInputStream(InputStream in, final ByteOrderMark... byteOrderMarks) { - super(in); - this.byteOrderMarks = applyByteOrderMarks(byteOrderMarks); - } - - public BomBufferedInputStream(InputStream in, int size, final ByteOrderMark... byteOrderMarks) { - super(in, size); - this.byteOrderMarks = applyByteOrderMarks(byteOrderMarks); - } - - private static List applyByteOrderMarks(ByteOrderMark[] byteOrderMarks) { - return byteOrderMarks == null || byteOrderMarks.length == 0 ? DEFAULT_BYTE_ORDER_MARKS : Arrays.asList(byteOrderMarks); - } - - public boolean hasByteOrderMark() throws IOException { - return getByteOrderMark() != null; - } - - public ByteOrderMark getByteOrderMark() throws IOException { - if (initialized) { - return byteOrderMark; - } - this.byteOrderMarks.sort(ByteOrderMark::compareTo); - int maxBomLength = byteOrderMarks.get(0).length(); - mark(maxBomLength); - int[] firstBytes = new int[maxBomLength]; - for (int i = 0; i < maxBomLength; i++) { - firstBytes[i] = read(); - if (firstBytes[i] < 0) { - break; - } - } - byteOrderMark = matchByteOrderMark(this.byteOrderMarks, firstBytes); - - reset(); - if (byteOrderMark != null) { - skip(byteOrderMark.length()); - } - initialized = true; - return byteOrderMark; - } - - private ByteOrderMark matchByteOrderMark(final List byteOrderMarks, final int[] firstBytes) { - loop: - for (ByteOrderMark item : byteOrderMarks) { - int[] bytes = item.getBytes(); - int length = bytes.length; - for (int i = 0; i < length; i++) { - if (firstBytes[i] != bytes[i]) { - continue loop; - } - } - return item; - } - return null; - } - -} diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java deleted file mode 100644 index 1ed078cf..00000000 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/ByteOrderMark.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.alibaba.excel.analysis.csv; - -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * Byte Order Mark (BOM) - *
- * User in {@link BomBufferedInputStream} - * - * @author supalle - * @see Byte Order Mark (BOM) FAQ - * @see Apache CommonsIO ByteOrderMark - */ -public class ByteOrderMark implements Comparable { - - /** - * UTF-8 BOM. - */ - public static final ByteOrderMark UTF_8 = new ByteOrderMark(StandardCharsets.UTF_8, 0xEF, 0xBB, 0xBF); - - /** - * UTF-16BE BOM (Big-Endian). - */ - public static final ByteOrderMark UTF_16BE = new ByteOrderMark(StandardCharsets.UTF_16BE, 0xFE, 0xFF); - - /** - * UTF-16LE BOM (Little-Endian). - */ - public static final ByteOrderMark UTF_16LE = new ByteOrderMark(StandardCharsets.UTF_16LE, 0xFF, 0xFE); - - /** - * UTF-32BE BOM (Big-Endian). - * - * @since 2.2 - */ - public static final ByteOrderMark UTF_32BE = new ByteOrderMark(Charset.forName("UTF-32BE"), 0x00, 0x00, 0xFE, 0xFF); - - /** - * UTF-32LE BOM (Little-Endian). - * - * @since 2.2 - */ - public static final ByteOrderMark UTF_32LE = new ByteOrderMark(Charset.forName("UTF-32LE"), 0xFF, 0xFE, 0x00, 0x00); - - private final Charset charset; - private final int[] bytes; - - public ByteOrderMark(final Charset charset, final int... bytes) { - this.charset = Objects.requireNonNull(charset, "charset must be not null"); - if (bytes == null || bytes.length == 0) { - throw new IllegalArgumentException("bytes must be not empty"); - } - this.bytes = bytes; - } - - public Charset getCharset() { - return charset; - } - - public int[] getBytes() { - return bytes; - } - - public int length() { - return bytes.length; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ByteOrderMark that = (ByteOrderMark) o; - return Objects.equals(charset, that.charset) && Arrays.equals(bytes, that.bytes); - } - - @Override - public int hashCode() { - int result = Objects.hash(charset); - result = 31 * result + Arrays.hashCode(bytes); - return result; - } - - @Override - public String toString() { - return "ByteOrderMark{" + - "charset=" + charset + - ", bytes=[" - + Arrays.stream(bytes) - .mapToObj(Integer::toHexString) - .map(String::toUpperCase) - .map("0x"::concat) - .collect(Collectors.joining(",")) + - "]}"; - } - - @Override - public int compareTo(ByteOrderMark o) { - return o.length() - length(); - } -} diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java index a1b7625d..6afabe34 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java @@ -1,6 +1,7 @@ package com.alibaba.excel.analysis.csv; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.nio.file.Files; import java.util.ArrayList; @@ -11,6 +12,7 @@ import java.util.Map; import com.alibaba.excel.analysis.ExcelReadExecutor; import com.alibaba.excel.context.csv.CsvReadContext; +import com.alibaba.excel.enums.ByteOrderMarkEnum; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.enums.RowTypeEnum; import com.alibaba.excel.exception.ExcelAnalysisException; @@ -27,6 +29,7 @@ import org.apache.commons.collections4.MapUtils; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; +import org.apache.commons.io.input.BOMInputStream; /** * read executor @@ -82,17 +85,26 @@ public class CsvExcelReadExecutor implements ExcelReadExecutor { private CSVParser csvParser() throws IOException { CsvReadWorkbookHolder csvReadWorkbookHolder = csvReadContext.csvReadWorkbookHolder(); CSVFormat csvFormat = csvReadWorkbookHolder.getCsvFormat(); - + ByteOrderMarkEnum byteOrderMark = ByteOrderMarkEnum.valueOfByCharsetName( + csvReadContext.csvReadWorkbookHolder().getCharset().name()); if (csvReadWorkbookHolder.getMandatoryUseInputStream()) { - return csvFormat.parse( - new InputStreamReader(csvReadWorkbookHolder.getInputStream(), csvReadWorkbookHolder.getCharset())); + return buildCsvParser(csvFormat, csvReadWorkbookHolder.getInputStream(), byteOrderMark); } if (csvReadWorkbookHolder.getFile() != null) { - return csvFormat.parse(new InputStreamReader(Files.newInputStream(csvReadWorkbookHolder.getFile().toPath()), - csvReadWorkbookHolder.getCharset())); + return buildCsvParser(csvFormat, Files.newInputStream(csvReadWorkbookHolder.getFile().toPath()), + byteOrderMark); + } + return buildCsvParser(csvFormat, csvReadWorkbookHolder.getInputStream(), byteOrderMark); + } + + private CSVParser buildCsvParser(CSVFormat csvFormat, InputStream inputStream, ByteOrderMarkEnum byteOrderMark) + throws IOException { + if (byteOrderMark == null) { + return csvFormat.parse( + new InputStreamReader(inputStream, csvReadContext.csvReadWorkbookHolder().getCharset())); } - return csvFormat.parse( - new InputStreamReader(csvReadWorkbookHolder.getInputStream(), csvReadWorkbookHolder.getCharset())); + return csvFormat.parse(new InputStreamReader(new BOMInputStream(inputStream, byteOrderMark.getByteOrderMark()), + csvReadContext.csvReadWorkbookHolder().getCharset())); } private void dealRecord(CSVRecord record, int rowIndex) { diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/enums/ByteOrderMarkEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/ByteOrderMarkEnum.java new file mode 100644 index 00000000..f6b1e8b0 --- /dev/null +++ b/easyexcel-core/src/main/java/com/alibaba/excel/enums/ByteOrderMarkEnum.java @@ -0,0 +1,51 @@ +package com.alibaba.excel.enums; + +import java.nio.charset.Charset; +import java.util.Map; + +import com.alibaba.excel.util.MapUtils; + +import lombok.Getter; +import org.apache.commons.io.ByteOrderMark; + +/** + * byte order mark + * + * @author Jiaju Zhuang + */ +@Getter +public enum ByteOrderMarkEnum { + + UTF_8(ByteOrderMark.UTF_8), + UTF_16BE(ByteOrderMark.UTF_16BE), + UTF_16LE(ByteOrderMark.UTF_16LE), + UTF_32BE(ByteOrderMark.UTF_32BE), + UTF_32LE(ByteOrderMark.UTF_32LE), + + ; + + final ByteOrderMark byteOrderMark; + final String stringPrefix; + + ByteOrderMarkEnum(ByteOrderMark byteOrderMark) { + this.byteOrderMark = byteOrderMark; + Charset charset = Charset.forName(byteOrderMark.getCharsetName()); + this.stringPrefix = new String(byteOrderMark.getBytes(), charset); + } + + /** + * store character aliases corresponding to `ByteOrderMark` prefix + */ + private static final Map CHARSET_BYTE_ORDER_MARK_MAP = MapUtils.newHashMap(); + + static { + for (ByteOrderMarkEnum value : ByteOrderMarkEnum.values()) { + CHARSET_BYTE_ORDER_MARK_MAP.put(value.getByteOrderMark().getCharsetName(), value); + } + } + + public static ByteOrderMarkEnum valueOfByCharsetName(String charsetName) { + return CHARSET_BYTE_ORDER_MARK_MAP.get(charsetName); + } + +} diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java index 725addbc..cf2cf8ec 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java @@ -3,24 +3,30 @@ package com.alibaba.excel.metadata.csv; import java.io.Closeable; import java.io.IOException; import java.math.BigDecimal; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import com.alibaba.excel.constant.BuiltinFormats; +import com.alibaba.excel.enums.ByteOrderMarkEnum; import com.alibaba.excel.enums.NumericCellTypeEnum; import com.alibaba.excel.exception.ExcelGenerateException; import com.alibaba.excel.util.DateUtils; import com.alibaba.excel.util.ListUtils; +import com.alibaba.excel.util.MapUtils; import com.alibaba.excel.util.NumberDataFormatterUtils; import com.alibaba.excel.util.StringUtils; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; +import org.apache.commons.io.ByteOrderMark; import org.apache.poi.ss.usermodel.AutoFilter; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellRange; @@ -51,6 +57,7 @@ import org.apache.poi.ss.util.PaneInformation; @Setter @EqualsAndHashCode public class CsvSheet implements Sheet, Closeable { + /** * workbook */ @@ -109,6 +116,13 @@ public class CsvSheet implements Sheet, Closeable { } rowCache = ListUtils.newArrayListWithExpectedSize(rowCacheCount); try { + if (csvWorkbook.getWithBom()) { + ByteOrderMarkEnum byteOrderMark = ByteOrderMarkEnum.valueOfByCharsetName( + csvWorkbook.getCharset().name()); + if (byteOrderMark != null) { + out.append(byteOrderMark.getStringPrefix()); + } + } csvPrinter = csvFormat.print(out); } catch (IOException e) { throw new ExcelGenerateException(e); diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java index 4e713509..d2f0e08b 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java @@ -2,6 +2,7 @@ package com.alibaba.excel.metadata.csv; import java.io.IOException; import java.io.OutputStream; +import java.nio.charset.Charset; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -71,11 +72,25 @@ public class CsvWorkbook implements Workbook { */ private List csvCellStyleList; - public CsvWorkbook(Appendable out, Locale locale, Boolean use1904windowing, Boolean useScientificFormat) { + /** + * charset. + */ + private Charset charset; + + /** + * Set the encoding prefix in the csv file, otherwise the office may open garbled characters. + * Default true. + */ + private Boolean withBom; + + public CsvWorkbook(Appendable out, Locale locale, Boolean use1904windowing, Boolean useScientificFormat, + Charset charset, Boolean withBom) { this.out = out; this.locale = locale; this.use1904windowing = use1904windowing; this.useScientificFormat = useScientificFormat; + this.charset = charset; + this.withBom = withBom; } @Override diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java index 04aeac4e..a65c2d79 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java @@ -1,9 +1,9 @@ package com.alibaba.excel.read.metadata.holder.csv; -import com.alibaba.excel.analysis.csv.BomBufferedInputStream; import com.alibaba.excel.read.metadata.ReadWorkbook; import com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder; import com.alibaba.excel.support.ExcelTypeEnum; + import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; @@ -30,34 +30,5 @@ public class CsvReadWorkbookHolder extends ReadWorkbookHolder { super(readWorkbook); setExcelType(ExcelTypeEnum.CSV); this.csvFormat = CSVFormat.DEFAULT; - // CSV BOM - if (readWorkbook.getCharset() == null) { - BomBufferedInputStream bomBufferedInputStream = buildBomBufferedInputStream(); - setInputStream(bomBufferedInputStream); - setMandatoryUseInputStream(Boolean.TRUE); - try { - if (bomBufferedInputStream.hasByteOrderMark()) { - setCharset(bomBufferedInputStream.getByteOrderMark().getCharset()); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - - private BomBufferedInputStream buildBomBufferedInputStream() { - BomBufferedInputStream bomBufferedInputStream; - try { - if (Boolean.TRUE.equals(getMandatoryUseInputStream())) { - bomBufferedInputStream = new BomBufferedInputStream(getInputStream()); - } else if (getFile() != null) { - bomBufferedInputStream = new BomBufferedInputStream(Files.newInputStream(getFile().toPath())); - } else { - bomBufferedInputStream = new BomBufferedInputStream(getInputStream()); - } - } catch (IOException e) { - throw new RuntimeException(e.getMessage()); - } - return bomBufferedInputStream; } } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/WorkBookUtil.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/WorkBookUtil.java index 8fc7c210..8ed49e6a 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/WorkBookUtil.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/WorkBookUtil.java @@ -70,7 +70,9 @@ public class WorkBookUtil { new OutputStreamWriter(writeWorkbookHolder.getOutputStream(), writeWorkbookHolder.getCharset())), writeWorkbookHolder.getGlobalConfiguration().getLocale(), writeWorkbookHolder.getGlobalConfiguration().getUse1904windowing(), - writeWorkbookHolder.getGlobalConfiguration().getUseScientificFormat()); + writeWorkbookHolder.getGlobalConfiguration().getUseScientificFormat(), + writeWorkbookHolder.getCharset(), + writeWorkbookHolder.getWithBom()); writeWorkbookHolder.setCachedWorkbook(csvWorkbook); writeWorkbookHolder.setWorkbook(csvWorkbook); return; diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java index 76af6f66..821898f1 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java @@ -94,6 +94,15 @@ public class ExcelWriterBuilder extends AbstractExcelWriterParameterBuilder diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java index e64b8e38..7cc23917 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java @@ -84,6 +84,13 @@ public class WriteWorkbookHolder extends AbstractWriteHolder { * Only work on the CSV file */ private Charset charset; + + /** + * Set the encoding prefix in the csv file, otherwise the office may open garbled characters. + * Default true. + */ + private Boolean withBom; + /** * Template input stream *

@@ -176,6 +183,12 @@ public class WriteWorkbookHolder extends AbstractWriteHolder { this.charset = writeWorkbook.getCharset(); } + if (writeWorkbook.getWithBom() == null) { + this.withBom = Boolean.TRUE; + } else { + this.withBom = writeWorkbook.getWithBom(); + } + if (writeWorkbook.getAutoCloseStream() == null) { this.autoCloseStream = Boolean.TRUE; } else { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomData.java index 24d8ece8..55b58fcd 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomData.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomData.java @@ -1,6 +1,7 @@ package com.alibaba.easyexcel.test.core.bom; import com.alibaba.excel.annotation.ExcelProperty; + import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; @@ -12,5 +13,5 @@ public class BomData { @ExcelProperty("姓名") private String name; @ExcelProperty("年纪") - private Integer age; + private Long age; } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomDataTest.java index 0c4ceacc..693708a3 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/bom/BomDataTest.java @@ -1,10 +1,18 @@ package com.alibaba.easyexcel.test.core.bom; +import com.alibaba.easyexcel.test.core.simple.SimpleData; +import com.alibaba.easyexcel.test.demo.read.DemoData; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.read.listener.PageReadListener; import com.alibaba.excel.read.listener.ReadListener; +import com.alibaba.excel.support.ExcelTypeEnum; +import com.alibaba.excel.util.ListUtils; +import com.alibaba.fastjson2.JSON; + +import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.utils.Lists; import org.junit.Assert; import org.junit.FixMethodOrder; @@ -12,17 +20,76 @@ import org.junit.Test; import org.junit.runners.MethodSorters; import java.io.File; +import java.io.FileOutputStream; +import java.nio.charset.Charset; +import java.util.ArrayList; import java.util.List; import java.util.Map; +/** + * bom test + * + * @author Jiaju Zhuang + */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) +@Slf4j public class BomDataTest { + + @Test + public void t01ReadCsv() { + readCsv(TestFileUtil.readFile("bom" + File.separator + "no_bom.csv")); + readCsv(TestFileUtil.readFile("bom" + File.separator + "office_bom.csv")); + } + @Test - public void t01ReadAndWriteCsv() { - readCsv(TestFileUtil.readFile("bom" + File.separator + "bom_none.csv")); - readCsv(TestFileUtil.readFile("bom" + File.separator + "bom_utf8.csv")); - readCsv(TestFileUtil.readFile("bom" + File.separator + "bom_utf16be.csv")); - readCsv(TestFileUtil.readFile("bom" + File.separator + "bom_utf16le.csv")); + public void t02ReadAndWriteCsv() throws Exception { + readAndWriteCsv(TestFileUtil.createNewFile("bom" + File.separator + "bom_default.csv"), null, null); + readAndWriteCsv(TestFileUtil.createNewFile("bom" + File.separator + "bom_utf_8.csv"), "UTF-8", null); + readAndWriteCsv(TestFileUtil.createNewFile("bom" + File.separator + "bom_utf_8_lower_case.csv"), "utf-8", null); + readAndWriteCsv(TestFileUtil.createNewFile("bom" + File.separator + "bom_gbk.csv"), "GBK", null); + readAndWriteCsv(TestFileUtil.createNewFile("bom" + File.separator + "bom_gbk_lower_case.csv"), "gbk", null); + readAndWriteCsv(TestFileUtil.createNewFile("bom" + File.separator + "bom_utf_16be.csv"), "UTF-16BE", null); + readAndWriteCsv(TestFileUtil.createNewFile("bom" + File.separator + "bom_utf_8_not_with_bom.csv"), "UTF-8", + Boolean.FALSE); + } + + private void readAndWriteCsv(File file, String charsetName, Boolean withBom) throws Exception { + Charset charset = null; + if (charsetName != null) { + charset = Charset.forName(charsetName); + } + EasyExcel.write(new FileOutputStream(file), BomData.class) + .charset(charset) + .withBom(withBom) + .excelType(ExcelTypeEnum.CSV) + .sheet() + .doWrite(data()); + + EasyExcel.read(file, BomData.class, new ReadListener() { + + private final List dataList = Lists.newArrayList(); + + @Override + public void invokeHead(Map> headMap, AnalysisContext context) { + String head = headMap.get(0).getStringValue(); + Assert.assertEquals("姓名", head); + } + + @Override + public void invoke(BomData data, AnalysisContext context) { + dataList.add(data); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + Assert.assertEquals(dataList.size(), 10); + BomData bomData = dataList.get(0); + Assert.assertEquals("姓名0", bomData.getName()); + Assert.assertEquals(20, (long)bomData.getAge()); + } + }) + .charset(charset) + .sheet().doRead(); } private void readCsv(File file) { @@ -46,8 +113,19 @@ public class BomDataTest { Assert.assertEquals(dataList.size(), 10); BomData bomData = dataList.get(0); Assert.assertEquals("姓名0", bomData.getName()); - Assert.assertEquals(0, (long) bomData.getAge()); + Assert.assertEquals(20L, (long)bomData.getAge()); } }).sheet().doRead(); } + + private List data() { + List list = ListUtils.newArrayList(); + for (int i = 0; i < 10; i++) { + BomData data = new BomData(); + data.setName("姓名" + i); + data.setAge(20L); + list.add(data); + } + return list; + } } diff --git a/easyexcel-test/src/test/resources/bom/bom_none.csv b/easyexcel-test/src/test/resources/bom/bom_none.csv deleted file mode 100644 index 26d73e1f..00000000 --- a/easyexcel-test/src/test/resources/bom/bom_none.csv +++ /dev/null @@ -1,11 +0,0 @@ -姓名,年纪 -姓名0,0 -姓名1,1 -姓名2,2 -姓名3,3 -姓名4,4 -姓名5,5 -姓名6,6 -姓名7,7 -姓名8,8 -姓名9,9 \ No newline at end of file diff --git a/easyexcel-test/src/test/resources/bom/bom_utf16be.csv b/easyexcel-test/src/test/resources/bom/bom_utf16be.csv deleted file mode 100644 index ad13f8716eaf7e8219509eb773a657cadfc3cec0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmX}fxei_@% diff --git a/easyexcel-test/src/test/resources/bom/bom_utf16le.csv b/easyexcel-test/src/test/resources/bom/bom_utf16le.csv deleted file mode 100644 index 8e8eba909c4cbf4eafa298a5014930dd2c7a051f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmX}fsS$uM00h9(%%qcu{7)a47^*<0ptM6jz#+JG``p(syTy5|X|Um&gN4IC&v`9y YL5p0}5|^~hWvy^Ut6bF@*R;-cyk{mG>i_@% diff --git a/easyexcel-test/src/test/resources/bom/bom_utf8.csv b/easyexcel-test/src/test/resources/bom/bom_utf8.csv deleted file mode 100644 index 358d5bac..00000000 --- a/easyexcel-test/src/test/resources/bom/bom_utf8.csv +++ /dev/null @@ -1,11 +0,0 @@ -姓名,年纪 -姓名0,0 -姓名1,1 -姓名2,2 -姓名3,3 -姓名4,4 -姓名5,5 -姓名6,6 -姓名7,7 -姓名8,8 -姓名9,9 \ No newline at end of file diff --git a/easyexcel-test/src/test/resources/bom/no_bom.csv b/easyexcel-test/src/test/resources/bom/no_bom.csv new file mode 100644 index 00000000..461c1eb0 --- /dev/null +++ b/easyexcel-test/src/test/resources/bom/no_bom.csv @@ -0,0 +1,11 @@ +姓名,年纪 +姓名0,20 +姓名1,20 +姓名2,20 +姓名3,20 +姓名4,20 +姓名5,20 +姓名6,20 +姓名7,20 +姓名8,20 +姓名9,20 \ No newline at end of file diff --git a/easyexcel-test/src/test/resources/bom/office_bom.csv b/easyexcel-test/src/test/resources/bom/office_bom.csv new file mode 100644 index 00000000..b6a80992 --- /dev/null +++ b/easyexcel-test/src/test/resources/bom/office_bom.csv @@ -0,0 +1,11 @@ +姓名,年纪 +姓名0,20 +姓名1,20 +姓名2,20 +姓名3,20 +姓名4,20 +姓名5,20 +姓名6,20 +姓名7,20 +姓名8,20 +姓名9,20 \ No newline at end of file diff --git a/pom.xml b/pom.xml index cceb0f94..4a73d527 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 3.2.1 + 3.3.0 UTF-8 1.8 true @@ -128,6 +128,11 @@ lombok 1.18.20 + + commons-io + commons-io + 2.11.0 + diff --git a/update.md b/update.md index f315c5b3..9d3b04af 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,8 @@ +# 3.3.0 + +* 读csv会忽略BOM数据 [Issue #3137](https://github.com/alibaba/easyexcel/issues/3137) +* 解决csv用office打开乱码的问题,写csv默认带上BOM数据 + # 3.2.1 * 兼容`LocalDate` [Issue #2908](https://github.com/alibaba/easyexcel/issues/2908) From 32aa7b450684ba61788a538a611e68f77a23557c Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 28 Apr 2023 16:58:54 +0800 Subject: [PATCH 21/53] =?UTF-8?q?=E6=96=B0=E5=A2=9Ecodestyle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- style/codestyle/idea/codestyle.xml | 90 +++++++++++++++++++++++++----- 1 file changed, 77 insertions(+), 13 deletions(-) diff --git a/style/codestyle/idea/codestyle.xml b/style/codestyle/idea/codestyle.xml index 98159561..5ee5b77b 100644 --- a/style/codestyle/idea/codestyle.xml +++ b/style/codestyle/idea/codestyle.xml @@ -1,27 +1,91 @@ - + \ No newline at end of file From 73b65d29a4655c9cc627611551ad8a8c88ed0331 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 28 Apr 2023 17:20:02 +0800 Subject: [PATCH 22/53] =?UTF-8?q?*=20xlsx=E5=AD=98=E5=9C=A8=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E5=AD=97=E7=AC=A6=E6=97=B6=E9=9C=80=E8=A6=81=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=EF=BC=8C=E7=A1=AE=E4=BF=9D=E5=92=8C=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E7=9C=8B=E5=88=B0=E7=9A=84=E4=B8=80=E6=A0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sax/SharedStringsTableHandler.java | 26 ++++++++++-- .../core/compatibility/CompatibilityTest.java | 14 +++++++ .../easyexcel/test/demo/rare/ReadTest.java | 38 ------------------ .../demo.xlsx => compatibility/t09.xlsx} | Bin update.md | 1 + 5 files changed, 37 insertions(+), 42 deletions(-) delete mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java rename easyexcel-test/src/test/resources/{temp/utfdecode/demo.xlsx => compatibility/t09.xlsx} (100%) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java index 169429de..509430f8 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java @@ -1,13 +1,31 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + package com.alibaba.excel.analysis.v07.handlers.sax; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import com.alibaba.excel.cache.ReadCache; import com.alibaba.excel.constant.ExcelXmlConstants; + import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** * Sax read sharedStringsTable.xml * @@ -146,7 +164,7 @@ public class SharedStringsTableHandler extends DefaultHandler { String code = m.group(1); int icode = Integer.decode("0x" + code); - buf.append((char) icode); + buf.append((char)icode); idx = m.end(); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java index df5a2dbb..bef3a42a 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java @@ -148,6 +148,20 @@ public class CompatibilityTest { Assert.assertEquals(10L, list.size()); } + @Test + public void t09() { + // `SH_x005f_x000D_Z002` exists in `ShardingString.xml` and needs to be replaced by: `SH_x000D_Z002` + File file = TestFileUtil.readFile("compatibility/t09.xlsx"); + List> list = EasyExcel.read(file) + .headRowNumber(0) + .sheet() + .doReadSync(); + log.info("data:{}", JSON.toJSONString(list)); + Assert.assertEquals(1, list.size()); + + Assert.assertEquals("SH_x000D_Z002", list.get(0).get(0)); + } + private List data() { List list = new ArrayList(); for (int i = 0; i < 10; i++) { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java deleted file mode 100644 index 2d8eb1d7..00000000 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/ReadTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.alibaba.easyexcel.test.demo.rare; - -import com.alibaba.easyexcel.test.util.TestFileUtil; -import com.alibaba.excel.EasyExcel; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Assert; -import org.junit.Test; - -import java.util.List; -import java.util.Map; - -/** - * 记录一些不太常见的案例 - * - * @author gxz gongxuanzhang@foxmail.com - **/ -public class ReadTest { - - - /** - * 当excel有需要转义的 如x005特殊符号时需要通过utf decode解码 - **/ - @Test - public void readX005() throws Exception { - String fileName = TestFileUtil.pathBuild().sub("temp").sub("utfdecode").sub("demo.xlsx").getPath(); - XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fileName); - XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0); - XSSFRow row = xssfSheet.getRow(0); - String poiValue = row.getCell(0).getStringCellValue(); - List> list = EasyExcel.read(fileName) - .sheet(0) - .headRowNumber(0).doReadSync(); - Map easyExcelRow = list.get(0); - Assert.assertEquals(easyExcelRow.get(0).toString(), poiValue); - } -} diff --git a/easyexcel-test/src/test/resources/temp/utfdecode/demo.xlsx b/easyexcel-test/src/test/resources/compatibility/t09.xlsx similarity index 100% rename from easyexcel-test/src/test/resources/temp/utfdecode/demo.xlsx rename to easyexcel-test/src/test/resources/compatibility/t09.xlsx diff --git a/update.md b/update.md index 9d3b04af..4c17271b 100644 --- a/update.md +++ b/update.md @@ -2,6 +2,7 @@ * 读csv会忽略BOM数据 [Issue #3137](https://github.com/alibaba/easyexcel/issues/3137) * 解决csv用office打开乱码的问题,写csv默认带上BOM数据 +* xlsx存在隐藏字符时需要忽略,确保和展示看到的一样 # 3.2.1 From 85a4ec853fd5396d1e2b0007bf358ab3453e84fb Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 28 Apr 2023 17:24:48 +0800 Subject: [PATCH 23/53] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/alibaba/excel/converters/DefaultConverterLoader.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java index 79236d16..8c371932 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java @@ -115,8 +115,6 @@ public class DefaultConverterLoader { putAllConverter(new StringNumberConverter()); putAllConverter(new StringStringConverter()); putAllConverter(new StringErrorConverter()); - - putAllConverter(new BigIntegerStringConverter()); } private static void initDefaultWriteConverter() { From 2286ceb708378cee1730ef3d7981f8a37a115e45 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 28 Apr 2023 17:33:51 +0800 Subject: [PATCH 24/53] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=8C=85=E5=BC=95=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- easyexcel-test/pom.xml | 34 ++++++++++++++++++++-------------- pom.xml | 34 ---------------------------------- update.md | 1 + 3 files changed, 21 insertions(+), 48 deletions(-) diff --git a/easyexcel-test/pom.xml b/easyexcel-test/pom.xml index d59ff594..1a39d325 100644 --- a/easyexcel-test/pom.xml +++ b/easyexcel-test/pom.xml @@ -24,32 +24,38 @@ com.alibaba easyexcel-core - test - - - ch.qos.logback - logback-classic - test com.alibaba.fastjson2 fastjson2 - test + 2.0.29 org.springframework.boot spring-boot-starter-web - test + 2.7.11 + + + org.springframework.boot + spring-boot-starter-test + 2.7.11 + + + + + org.slf4j + jcl-over-slf4j + 1.7.36 - junit - junit - test + org.slf4j + log4j-over-slf4j + 1.7.36 - commons-logging - commons-logging - test + ch.qos.logback + logback-classic + 1.4.7 diff --git a/pom.xml b/pom.xml index 9b1bf906..7288396a 100644 --- a/pom.xml +++ b/pom.xml @@ -133,40 +133,6 @@ commons-io 2.11.0 - - - - org.springframework - spring-core - 5.3.27 - - - - - ch.qos.logback - logback-classic - 1.2.5 - - - com.alibaba.fastjson2 - fastjson2 - 2.0.23 - - - org.springframework.boot - spring-boot-starter-web - 2.6.3 - - - junit - junit - 4.13.2 - - - commons-logging - commons-logging - 1.2 - diff --git a/update.md b/update.md index 4c17271b..90a63b50 100644 --- a/update.md +++ b/update.md @@ -3,6 +3,7 @@ * 读csv会忽略BOM数据 [Issue #3137](https://github.com/alibaba/easyexcel/issues/3137) * 解决csv用office打开乱码的问题,写csv默认带上BOM数据 * xlsx存在隐藏字符时需要忽略,确保和展示看到的一样 +* 新增`commons-io` 2.11.0 包 # 3.2.1 From f226ed77c996cc63eabb6ff4c54dc261675ed913 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 28 Apr 2023 17:35:16 +0800 Subject: [PATCH 25/53] =?UTF-8?q?*=20=E5=9C=A8`easyexcel-parent`=20?= =?UTF-8?q?=E5=8C=85=E4=B8=AD=E7=A7=BB=E9=99=A4=E6=B5=8B=E8=AF=95=E5=8C=85?= =?UTF-8?q?=E7=9A=84`dependencyManagement`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- update.md | 1 + 1 file changed, 1 insertion(+) diff --git a/update.md b/update.md index 90a63b50..faabba6a 100644 --- a/update.md +++ b/update.md @@ -4,6 +4,7 @@ * 解决csv用office打开乱码的问题,写csv默认带上BOM数据 * xlsx存在隐藏字符时需要忽略,确保和展示看到的一样 * 新增`commons-io` 2.11.0 包 +* 在`easyexcel-parent` 包中移除测试包的`dependencyManagement` # 3.2.1 From 9ad63b696ee4951ddb7707e3b2d33d6a5c64c73e Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Fri, 28 Apr 2023 18:01:17 +0800 Subject: [PATCH 26/53] support force index --- .../com/alibaba/excel/util/ClassUtils.java | 34 ++++++++++++++++++ .../AbstractExcelWriterParameterBuilder.java | 9 +++++ .../write/metadata/WriteBasicParameter.java | 4 +++ .../metadata/holder/AbstractWriteHolder.java | 10 +++++- .../ExcludeOrIncludeDataTest.java | 35 +++++++++++++++++++ 5 files changed, 91 insertions(+), 1 deletion(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index 6bed3052..b42df514 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -3,9 +3,11 @@ package com.alibaba.excel.util; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -29,6 +31,7 @@ import com.alibaba.excel.metadata.property.ExcelContentProperty; import com.alibaba.excel.metadata.property.FontProperty; import com.alibaba.excel.metadata.property.NumberFormatProperty; import com.alibaba.excel.metadata.property.StyleProperty; +import com.alibaba.excel.write.metadata.holder.AbstractWriteHolder; import com.alibaba.excel.write.metadata.holder.WriteHolder; import lombok.AllArgsConstructor; @@ -36,6 +39,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; import org.springframework.cglib.beans.BeanMap; +import org.springframework.util.CollectionUtils; /** * Licensed to the Apache Software Foundation (ASF) under one or more @@ -250,6 +254,36 @@ public class ClassUtils { } } } + forceIndexIfNecessary(holder, sortedAllFieldMap); + } + + /** + * it only works when {@link AbstractWriteHolder#getIncludeColumnFieldNames()} has value + * and {@link AbstractWriteHolder#getForceIndex()} is true + **/ + private static void forceIndexIfNecessary(Holder holder, Map sortedAllFieldMap) { + if (!(holder instanceof AbstractWriteHolder)) { + return; + } + AbstractWriteHolder writeHolder = (AbstractWriteHolder)holder; + Collection allCol = writeHolder.getIncludeColumnFieldNames(); + if (!CollectionUtils.isEmpty(allCol) && writeHolder.getForceIndex() != null && writeHolder.getForceIndex()) { + Map colIndexMap = MapUtils.newHashMap(); + Iterator iterator = allCol.iterator(); + int colIndex = 0; + while (iterator.hasNext()) { + String col = iterator.next(); + colIndexMap.put(col, colIndex); + colIndex++; + } + Map temp = MapUtils.newHashMap(); + sortedAllFieldMap.forEach((index, field) -> { + Integer fieldIndex = colIndexMap.get(field.getName()); + temp.put(fieldIndex, field); + }); + sortedAllFieldMap.clear(); + sortedAllFieldMap.putAll(temp); + } } public static void declaredFields(Class clazz, Map sortedAllFieldMap, Boolean needIgnore, diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java index f8844a52..89ff01a3 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java @@ -120,4 +120,13 @@ public abstract class AbstractExcelWriterParameterBuilder includeColumnFieldNames; + /** + * head sorted use includeColumnFieldNames sort + */ + private Boolean forceIndex; } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java index b6907e42..4d7bc476 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java @@ -94,7 +94,10 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ * Only output the custom columns. */ private Collection includeColumnFieldNames; - + /** + * head sorted use {@link #includeColumnFieldNames} sort + */ + private Boolean forceIndex; /** * Write handler */ @@ -194,6 +197,11 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ } else { this.includeColumnFieldNames = writeBasicParameter.getIncludeColumnFieldNames(); } + if (writeBasicParameter.getForceIndex() == null && parentAbstractWriteHolder != null) { + this.forceIndex = parentAbstractWriteHolder.getForceIndex(); + } else { + this.forceIndex = writeBasicParameter.getForceIndex(); + } if (writeBasicParameter.getIncludeColumnIndexes() == null && parentAbstractWriteHolder != null) { this.includeColumnIndexes = parentAbstractWriteHolder.getIncludeColumnIndexes(); } else { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java index 9bf69821..6bd824db 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java @@ -34,6 +34,9 @@ public class ExcludeOrIncludeDataTest { private static File includeFieldName07; private static File includeFieldName03; private static File includeFieldNameCsv; + private static File includeFieldNameForceIndex07; + private static File includeFieldNameForceIndex03; + private static File includeFieldNameForceIndexCsv; @BeforeClass public static void init() { @@ -49,6 +52,9 @@ public class ExcludeOrIncludeDataTest { includeFieldName07 = TestFileUtil.createNewFile("includeFieldName.xlsx"); includeFieldName03 = TestFileUtil.createNewFile("includeFieldName.xls"); includeFieldNameCsv = TestFileUtil.createNewFile("includeFieldName.csv"); + includeFieldNameForceIndex07 = TestFileUtil.createNewFile("includeFieldNameForceIndex.xlsx"); + includeFieldNameForceIndex03 = TestFileUtil.createNewFile("includeFieldNameForceIndex.xls"); + includeFieldNameForceIndexCsv = TestFileUtil.createNewFile("includeFieldNameForceIndex.csv"); } @Test @@ -112,6 +118,21 @@ public class ExcludeOrIncludeDataTest { includeFieldName(includeFieldNameCsv); } + @Test + public void t41IncludeFieldName07() { + includeFieldNameForce(includeFieldNameForceIndex07); + } + + @Test + public void t42IncludeFieldName03() { + includeFieldNameForce(includeFieldNameForceIndex03); + } + + @Test + public void t43IncludeFieldNameCsv() { + includeFieldNameForce(includeFieldNameForceIndexCsv); + } + private void excludeIndex(File file) { Set excludeColumnIndexes = new HashSet(); excludeColumnIndexes.add(0); @@ -171,6 +192,20 @@ public class ExcludeOrIncludeDataTest { Assert.assertEquals("column3", record.get(1)); } + private void includeFieldNameForce(File file) { + List includeColumnFieldNames = new ArrayList<>(); + includeColumnFieldNames.add("column3"); + includeColumnFieldNames.add("column2"); + EasyExcel.write(file, ExcludeOrIncludeData.class).includeColumnFieldNames(includeColumnFieldNames) + .forceIndex(true).sheet().doWrite(data()); + List> dataMap = EasyExcel.read(file).sheet().doReadSync(); + Assert.assertEquals(1, dataMap.size()); + Map record = dataMap.get(0); + Assert.assertEquals(2, record.size()); + Assert.assertEquals("column3", record.get(0)); + Assert.assertEquals("column2", record.get(1)); + } + private List data() { List list = new ArrayList(); ExcludeOrIncludeData excludeOrIncludeData = new ExcludeOrIncludeData(); From 6923b804affd621b6c04c2bf011a4f2223d0c622 Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Fri, 28 Apr 2023 18:12:26 +0800 Subject: [PATCH 27/53] PoiUtils initRowField add thread security --- .../java/com/alibaba/excel/util/PoiUtils.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java index 2989b22b..907bd16f 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java @@ -1,6 +1,9 @@ package com.alibaba.excel.util; +import java.lang.reflect.Field; + import com.alibaba.excel.exception.ExcelRuntimeException; + import org.apache.poi.hssf.record.RowRecord; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.ss.usermodel.Row; @@ -8,8 +11,6 @@ import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; import org.apache.poi.xssf.usermodel.XSSFRow; -import java.lang.reflect.Field; - /** * utils * @@ -22,7 +23,7 @@ public class PoiUtils { */ public static final BitField CUSTOM_HEIGHT = BitFieldFactory.getInstance(0x640); - private static Field ROW_RECORD_FIELD; + private static volatile Field ROW_RECORD_FIELD; /** * Whether to customize the height @@ -32,16 +33,20 @@ public class PoiUtils { */ public static boolean customHeight(Row row) { if (row instanceof XSSFRow) { - XSSFRow xssfRow = (XSSFRow) row; + XSSFRow xssfRow = (XSSFRow)row; return xssfRow.getCTRow().getCustomHeight(); } if (row instanceof HSSFRow) { - HSSFRow hssfRow = (HSSFRow) row; + HSSFRow hssfRow = (HSSFRow)row; try { if (ROW_RECORD_FIELD == null) { - initRowRecordField(); + synchronized (PoiUtils.class) { + if (ROW_RECORD_FIELD == null) { + initRowRecordField(); + } + } } - RowRecord record = (RowRecord) ROW_RECORD_FIELD.get(hssfRow); + RowRecord record = (RowRecord)ROW_RECORD_FIELD.get(hssfRow); return CUSTOM_HEIGHT.getValue(record.getOptionFlags()) == 1; } catch (IllegalAccessException ignore) { } @@ -49,7 +54,6 @@ public class PoiUtils { return false; } - private static void initRowRecordField() { try { ROW_RECORD_FIELD = HSSFRow.class.getDeclaredField("row"); From 98e2420868ed1a0b7952982fd1ea9327d8dad190 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 28 Apr 2023 18:55:54 +0800 Subject: [PATCH 28/53] =?UTF-8?q?*=20=E5=88=A0=E9=99=A4`org.apache.poi.hss?= =?UTF-8?q?f.usermodel.PoiUtils.java`=EF=BC=8C=20=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=8F=8D=E5=B0=84=E8=8E=B7=E5=8F=96=20[Issue=20#2804](https://?= =?UTF-8?q?github.com/alibaba/easyexcel/issues/2804)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/alibaba/excel/util/PoiUtils.java | 22 +++++-------------- update.md | 1 + 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java index 2989b22b..0b70a487 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/PoiUtils.java @@ -1,6 +1,7 @@ package com.alibaba.excel.util; import com.alibaba.excel.exception.ExcelRuntimeException; + import org.apache.poi.hssf.record.RowRecord; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.ss.usermodel.Row; @@ -22,7 +23,7 @@ public class PoiUtils { */ public static final BitField CUSTOM_HEIGHT = BitFieldFactory.getInstance(0x640); - private static Field ROW_RECORD_FIELD; + private static final Field ROW_RECORD_FIELD = FieldUtils.getField(HSSFRow.class, "row", true); /** * Whether to customize the height @@ -32,30 +33,17 @@ public class PoiUtils { */ public static boolean customHeight(Row row) { if (row instanceof XSSFRow) { - XSSFRow xssfRow = (XSSFRow) row; + XSSFRow xssfRow = (XSSFRow)row; return xssfRow.getCTRow().getCustomHeight(); } if (row instanceof HSSFRow) { - HSSFRow hssfRow = (HSSFRow) row; + HSSFRow hssfRow = (HSSFRow)row; try { - if (ROW_RECORD_FIELD == null) { - initRowRecordField(); - } - RowRecord record = (RowRecord) ROW_RECORD_FIELD.get(hssfRow); + RowRecord record = (RowRecord)ROW_RECORD_FIELD.get(hssfRow); return CUSTOM_HEIGHT.getValue(record.getOptionFlags()) == 1; } catch (IllegalAccessException ignore) { } } return false; } - - - private static void initRowRecordField() { - try { - ROW_RECORD_FIELD = HSSFRow.class.getDeclaredField("row"); - ROW_RECORD_FIELD.setAccessible(true); - } catch (NoSuchFieldException e) { - throw new ExcelRuntimeException(e); - } - } } diff --git a/update.md b/update.md index faabba6a..76f8aa1a 100644 --- a/update.md +++ b/update.md @@ -5,6 +5,7 @@ * xlsx存在隐藏字符时需要忽略,确保和展示看到的一样 * 新增`commons-io` 2.11.0 包 * 在`easyexcel-parent` 包中移除测试包的`dependencyManagement` +* 删除`org.apache.poi.hssf.usermodel.PoiUtils.java`, 使用反射获取 [Issue #2804](https://github.com/alibaba/easyexcel/issues/2804) # 3.2.1 From e9856e5549d83fdcc08b182b98bc9f7a9cf64448 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 28 Apr 2023 22:14:21 +0800 Subject: [PATCH 29/53] =?UTF-8?q?*=20=E9=BB=98=E8=AE=A4=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E5=8F=8D=E5=B0=84=E7=BC=93=E5=AD=98=E6=94=B9=E6=88=90`ThreadLo?= =?UTF-8?q?cal`,=E5=B9=B6=E6=94=AF=E6=8C=81=E8=AE=BE=E7=BD=AE=20[Issue=20#?= =?UTF-8?q?2792](https://github.com/alibaba/easyexcel/issues/2792)=20*=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=A0=B9=E6=8D=AE`includeColumnIndexes`?= =?UTF-8?q?=E5=92=8C`includeColumnFieldNames`=E6=8E=92=E5=BA=8F=20[Issue?= =?UTF-8?q?=20#2697](https://github.com/alibaba/easyexcel/issues/2697)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/analysis/ExcelAnalyserImpl.java | 2 + .../excel/context/WriteContextImpl.java | 3 +- .../excel/enums/CacheLocationEnum.java | 23 + .../excel/metadata/AbstractHolder.java | 9 + .../excel/metadata/BasicParameter.java | 8 + .../alibaba/excel/metadata/FieldCache.java | 37 ++ .../excel/metadata/GlobalConfiguration.java | 11 + .../metadata/property/ExcelHeadProperty.java | 34 +- .../listener/ModelBuildEventListener.java | 3 +- .../property/ExcelReadHeadProperty.java | 5 +- .../com/alibaba/excel/util/ClassUtils.java | 435 +++++++++++------- .../AbstractExcelWriterParameterBuilder.java | 9 +- .../write/executor/ExcelWriteAddExecutor.java | 29 +- .../executor/ExcelWriteFillExecutor.java | 8 +- .../write/metadata/WriteBasicParameter.java | 7 +- .../metadata/holder/AbstractWriteHolder.java | 45 +- .../write/metadata/holder/WriteHolder.java | 29 +- .../metadata/holder/WriteWorkbookHolder.java | 1 + .../property/ExcelWriteHeadProperty.java | 5 +- .../ExcludeOrIncludeDataTest.java | 14 +- update.md | 5 +- 21 files changed, 483 insertions(+), 239 deletions(-) create mode 100644 easyexcel-core/src/main/java/com/alibaba/excel/enums/CacheLocationEnum.java create mode 100644 easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldCache.java diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java index f8f34d90..8421a160 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java @@ -19,6 +19,7 @@ import com.alibaba.excel.read.metadata.holder.csv.CsvReadWorkbookHolder; import com.alibaba.excel.read.metadata.holder.xls.XlsReadWorkbookHolder; import com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder; import com.alibaba.excel.support.ExcelTypeEnum; +import com.alibaba.excel.util.ClassUtils; import com.alibaba.excel.util.DateUtils; import com.alibaba.excel.util.FileUtils; import com.alibaba.excel.util.NumberDataFormatterUtils; @@ -212,6 +213,7 @@ public class ExcelAnalyserImpl implements ExcelAnalyser { private void removeThreadLocalCache() { NumberDataFormatterUtils.removeThreadLocalCache(); DateUtils.removeThreadLocalCache(); + ClassUtils.removeThreadLocalCache(); } private void clearEncrypt03() { diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContextImpl.java b/easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContextImpl.java index db892989..9fff8449 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContextImpl.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContextImpl.java @@ -265,7 +265,7 @@ public class WriteContextImpl implements WriteContext { Head head = entry.getValue(); int columnIndex = entry.getKey(); ExcelContentProperty excelContentProperty = ClassUtils.declaredExcelContentProperty(null, - currentWriteHolder.excelWriteHeadProperty().getHeadClazz(), head.getFieldName()); + currentWriteHolder.excelWriteHeadProperty().getHeadClazz(), head.getFieldName(), currentWriteHolder); CellWriteHandlerContext cellWriteHandlerContext = WriteHandlerUtils.createCellWriteHandlerContext(this, row, rowIndex, head, columnIndex, relativeRowIndex, Boolean.TRUE, excelContentProperty); @@ -427,6 +427,7 @@ public class WriteContextImpl implements WriteContext { private void removeThreadLocalCache() { NumberDataFormatterUtils.removeThreadLocalCache(); DateUtils.removeThreadLocalCache(); + ClassUtils.removeThreadLocalCache(); } @Override diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/enums/CacheLocationEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/CacheLocationEnum.java new file mode 100644 index 00000000..e2deed52 --- /dev/null +++ b/easyexcel-core/src/main/java/com/alibaba/excel/enums/CacheLocationEnum.java @@ -0,0 +1,23 @@ +package com.alibaba.excel.enums; + +/** + * cache locaciton + * + * @author Jiaju Zhuang + **/ +public enum CacheLocationEnum { + /** + * The cache will be stored in {@code ThreadLocal}, and will be cleared when the excel read and write is completed. + */ + THREAD_LOCAL, + + /** + * The cache will not be cleared unless the app is stopped. + */ + MEMORY, + + /** + * No caching.It may lose some of performance. + */ + NONE; +} diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractHolder.java index 839a8b4b..ac97c03b 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractHolder.java @@ -83,6 +83,15 @@ public abstract class AbstractHolder implements ConfigurationHolder { globalConfiguration.setLocale(basicParameter.getLocale()); } + if (basicParameter.getFiledCacheLocation() == null) { + if (prentAbstractHolder != null) { + globalConfiguration.setFiledCacheLocation( + prentAbstractHolder.getGlobalConfiguration().getFiledCacheLocation()); + } + } else { + globalConfiguration.setFiledCacheLocation(basicParameter.getFiledCacheLocation()); + } + } @Override diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/BasicParameter.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/BasicParameter.java index 0c11f942..e0127a8b 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/BasicParameter.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/BasicParameter.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Locale; import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CacheLocationEnum; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -54,4 +55,11 @@ public class BasicParameter { * default is false */ private Boolean useScientificFormat; + + /** + * The cache used when parsing fields such as head. + * + * default is THREAD_LOCAL. + */ + private CacheLocationEnum filedCacheLocation; } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldCache.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldCache.java new file mode 100644 index 00000000..19fbc3e3 --- /dev/null +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldCache.java @@ -0,0 +1,37 @@ +package com.alibaba.excel.metadata; + +import java.lang.reflect.Field; +import java.util.Map; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +/** + * filed cache + * + * @author Jiaju Zhuang + */ +@Getter +@Setter +@EqualsAndHashCode +@AllArgsConstructor +public class FieldCache { + + /** + * A field cache that has been sorted by a class. + * It will exclude fields that are not needed. + */ + private Map sortedFieldMap; + + /** + * Fields using the index attribute + */ + private Map indexFieldMap; + + /** + * Fields to ignore + */ + private Map ignoreMap; +} diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java index 5cafe90c..e11f6e9d 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java @@ -2,6 +2,8 @@ package com.alibaba.excel.metadata; import java.util.Locale; +import com.alibaba.excel.enums.CacheLocationEnum; + import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; @@ -32,6 +34,7 @@ public class GlobalConfiguration { * used when formatting dates and numbers. */ private Locale locale; + /** * Whether to use scientific Format. * @@ -39,10 +42,18 @@ public class GlobalConfiguration { */ private Boolean useScientificFormat; + /** + * The cache used when parsing fields such as head. + * + * default is THREAD_LOCAL. + */ + private CacheLocationEnum filedCacheLocation; + public GlobalConfiguration() { this.autoTrim = Boolean.TRUE; this.use1904windowing = Boolean.FALSE; this.locale = Locale.getDefault(); this.useScientificFormat = Boolean.FALSE; + this.filedCacheLocation = CacheLocationEnum.MEMORY; } } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java index 61240d31..c8bc36d7 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java @@ -9,6 +9,8 @@ import java.util.TreeMap; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.enums.HeadKindEnum; +import com.alibaba.excel.metadata.ConfigurationHolder; +import com.alibaba.excel.metadata.FieldCache; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.metadata.Holder; import com.alibaba.excel.util.ClassUtils; @@ -51,22 +53,17 @@ public class ExcelHeadProperty { * Configuration header information */ private Map headMap; - /** - * Fields ignored - */ - private Map ignoreMap; - public ExcelHeadProperty(Holder holder, Class headClazz, List> head) { + public ExcelHeadProperty(ConfigurationHolder configurationHolder, Class headClazz, List> head) { this.headClazz = headClazz; headMap = new TreeMap<>(); - ignoreMap = MapUtils.newHashMap(); headKind = HeadKindEnum.NONE; headRowNumber = 0; if (head != null && !head.isEmpty()) { int headIndex = 0; for (int i = 0; i < head.size(); i++) { - if (holder instanceof AbstractWriteHolder) { - if (((AbstractWriteHolder)holder).ignore(null, i)) { + if (configurationHolder instanceof AbstractWriteHolder) { + if (((AbstractWriteHolder)configurationHolder).ignore(null, i)) { continue; } } @@ -76,7 +73,7 @@ public class ExcelHeadProperty { headKind = HeadKindEnum.STRING; } // convert headClazz to head - initColumnProperties(holder); + initColumnProperties(configurationHolder); initHeadRowNumber(); if (LOGGER.isDebugEnabled()) { @@ -104,24 +101,15 @@ public class ExcelHeadProperty { } } - private void initColumnProperties(Holder holder) { + private void initColumnProperties(ConfigurationHolder configurationHolder) { if (headClazz == null) { return; } - // Declared fields - Map sortedAllFieldMap = MapUtils.newTreeMap(); - Map indexFieldMap = MapUtils.newTreeMap(); - - boolean needIgnore = (holder instanceof AbstractWriteHolder) && ( - !CollectionUtils.isEmpty(((AbstractWriteHolder)holder).getExcludeColumnFieldNames()) || !CollectionUtils - .isEmpty(((AbstractWriteHolder)holder).getExcludeColumnIndexes()) || !CollectionUtils - .isEmpty(((AbstractWriteHolder)holder).getIncludeColumnFieldNames()) || !CollectionUtils - .isEmpty(((AbstractWriteHolder)holder).getIncludeColumnIndexes())); - - ClassUtils.declaredFields(headClazz, sortedAllFieldMap, indexFieldMap, ignoreMap, needIgnore, holder); + FieldCache fieldCache = ClassUtils.declaredFields(headClazz, configurationHolder); - for (Map.Entry entry : sortedAllFieldMap.entrySet()) { - initOneColumnProperty(entry.getKey(), entry.getValue(), indexFieldMap.containsKey(entry.getKey())); + for (Map.Entry entry : fieldCache.getSortedFieldMap().entrySet()) { + initOneColumnProperty(entry.getKey(), entry.getValue(), + fieldCache.getIndexFieldMap().containsKey(entry.getKey())); } headKind = HeadKindEnum.CLASS; } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java index 41a4f1f6..c3fb3bc9 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java @@ -149,7 +149,8 @@ public class ModelBuildEventListener implements IgnoreExceptionReadListener cellData = cellDataMap.get(index); Object value = ConverterUtils.convertToJavaObject(cellData, head.getField(), ClassUtils.declaredExcelContentProperty(dataMap, readSheetHolder.excelReadHeadProperty().getHeadClazz(), - fieldName), readSheetHolder.converterMap(), context, context.readRowHolder().getRowIndex(), index); + fieldName, readSheetHolder), readSheetHolder.converterMap(), context, + context.readRowHolder().getRowIndex(), index); if (value != null) { dataMap.put(fieldName, value); } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/property/ExcelReadHeadProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/property/ExcelReadHeadProperty.java index 9c332ceb..0329715c 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/property/ExcelReadHeadProperty.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/property/ExcelReadHeadProperty.java @@ -2,6 +2,7 @@ package com.alibaba.excel.read.metadata.property; import java.util.List; +import com.alibaba.excel.metadata.ConfigurationHolder; import com.alibaba.excel.metadata.Holder; import com.alibaba.excel.metadata.property.ExcelHeadProperty; @@ -12,7 +13,7 @@ import com.alibaba.excel.metadata.property.ExcelHeadProperty; */ public class ExcelReadHeadProperty extends ExcelHeadProperty { - public ExcelReadHeadProperty(Holder holder, Class headClazz, List> head) { - super(holder, headClazz, head); + public ExcelReadHeadProperty(ConfigurationHolder configurationHolder, Class headClazz, List> head) { + super(configurationHolder, headClazz, head); } } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index b42df514..d0a99c00 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -14,6 +14,7 @@ import java.util.Map; import java.util.Optional; import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; @@ -24,7 +25,10 @@ import com.alibaba.excel.annotation.write.style.ContentFontStyle; import com.alibaba.excel.annotation.write.style.ContentStyle; import com.alibaba.excel.converters.AutoConverter; import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CacheLocationEnum; import com.alibaba.excel.exception.ExcelCommonException; +import com.alibaba.excel.metadata.ConfigurationHolder; +import com.alibaba.excel.metadata.FieldCache; import com.alibaba.excel.metadata.Holder; import com.alibaba.excel.metadata.property.DateTimeFormatProperty; import com.alibaba.excel.metadata.property.ExcelContentProperty; @@ -59,18 +63,38 @@ import org.springframework.util.CollectionUtils; */ public class ClassUtils { - public static final Map, FieldCache> FIELD_CACHE = new ConcurrentHashMap<>(); + /** + * memory cache + */ + public static final ConcurrentHashMap, FieldCache> FIELD_CACHE = new ConcurrentHashMap<>(); + /** + * thread local cahe + */ + private static final ThreadLocal, FieldCache>> FIELD_THREAD_LOCAL = new ThreadLocal<>(); /** * The cache configuration information for each of the class */ - public static final Map, Map> CLASS_CONTENT_CACHE + public static final ConcurrentHashMap, Map> CLASS_CONTENT_CACHE = new ConcurrentHashMap<>(); /** * The cache configuration information for each of the class */ - public static final Map CONTENT_CACHE = new ConcurrentHashMap<>(); + private static final ThreadLocal, Map>> CLASS_CONTENT_THREAD_LOCAL + = new ThreadLocal<>(); + + /** + * The cache configuration information for each of the class + */ + public static final ConcurrentHashMap CONTENT_CACHE + = new ConcurrentHashMap<>(); + + /** + * The cache configuration information for each of the class + */ + private static final ThreadLocal> CONTENT_THREAD_LOCAL + = new ThreadLocal<>(); /** * Calculate the configuration information for the class @@ -81,7 +105,7 @@ public class ClassUtils { * @return */ public static ExcelContentProperty declaredExcelContentProperty(Map dataMap, Class headClazz, - String fieldName) { + String fieldName, ConfigurationHolder configurationHolder) { Class clazz = null; if (dataMap instanceof BeanMap) { Object bean = ((BeanMap)dataMap).getBean(); @@ -89,26 +113,49 @@ public class ClassUtils { clazz = bean.getClass(); } } - return getExcelContentProperty(clazz, headClazz, fieldName); + return getExcelContentProperty(clazz, headClazz, fieldName, configurationHolder); } - private static ExcelContentProperty getExcelContentProperty(Class clazz, Class headClass, String fieldName) { - return CONTENT_CACHE.computeIfAbsent(buildKey(clazz, headClass, fieldName), key -> { - ExcelContentProperty excelContentProperty = Optional.ofNullable(declaredFieldContentMap(clazz)) - .map(map -> map.get(fieldName)) - .orElse(null); - ExcelContentProperty headExcelContentProperty = Optional.ofNullable(declaredFieldContentMap(headClass)) - .map(map -> map.get(fieldName)) - .orElse(null); - ExcelContentProperty combineExcelContentProperty = new ExcelContentProperty(); - - combineExcelContentProperty(combineExcelContentProperty, headExcelContentProperty); - if (clazz != headClass) { - combineExcelContentProperty(combineExcelContentProperty, excelContentProperty); - } - return combineExcelContentProperty; - }); + private static ExcelContentProperty getExcelContentProperty(Class clazz, Class headClass, String fieldName, + ConfigurationHolder configurationHolder) { + switch (configurationHolder.globalConfiguration().getFiledCacheLocation()) { + case THREAD_LOCAL: + Map contentCacheMap = CONTENT_THREAD_LOCAL.get(); + if (contentCacheMap == null) { + contentCacheMap = MapUtils.newHashMap(); + CONTENT_THREAD_LOCAL.set(contentCacheMap); + } + return contentCacheMap.computeIfAbsent(buildKey(clazz, headClass, fieldName), key -> { + return doGetExcelContentProperty(clazz, headClass, fieldName, configurationHolder); + }); + case MEMORY: + return CONTENT_CACHE.computeIfAbsent(buildKey(clazz, headClass, fieldName), key -> { + return doGetExcelContentProperty(clazz, headClass, fieldName, configurationHolder); + }); + case NONE: + return doGetExcelContentProperty(clazz, headClass, fieldName, configurationHolder); + default: + throw new UnsupportedOperationException("unsupported enum"); + } + } + private static ExcelContentProperty doGetExcelContentProperty(Class clazz, Class headClass, + String fieldName, ConfigurationHolder configurationHolder) { + ExcelContentProperty excelContentProperty = Optional.ofNullable( + declaredFieldContentMap(clazz, configurationHolder)) + .map(map -> map.get(fieldName)) + .orElse(null); + ExcelContentProperty headExcelContentProperty = Optional.ofNullable( + declaredFieldContentMap(headClass, configurationHolder)) + .map(map -> map.get(fieldName)) + .orElse(null); + ExcelContentProperty combineExcelContentProperty = new ExcelContentProperty(); + + combineExcelContentProperty(combineExcelContentProperty, headExcelContentProperty); + if (clazz != headClass) { + combineExcelContentProperty(combineExcelContentProperty, excelContentProperty); + } + return combineExcelContentProperty; } public static void combineExcelContentProperty(ExcelContentProperty combineExcelContentProperty, @@ -140,182 +187,248 @@ public class ClassUtils { return new ContentPropertyKey(clazz, headClass, fieldName); } - private static Map declaredFieldContentMap(Class clazz) { + private static Map declaredFieldContentMap(Class clazz, + ConfigurationHolder configurationHolder) { if (clazz == null) { return null; } - return CLASS_CONTENT_CACHE.computeIfAbsent(clazz, key -> { - List tempFieldList = new ArrayList<>(); - Class tempClass = clazz; - while (tempClass != null) { - Collections.addAll(tempFieldList, tempClass.getDeclaredFields()); - // Get the parent class and give it to yourself - tempClass = tempClass.getSuperclass(); - } - - ContentStyle parentContentStyle = clazz.getAnnotation(ContentStyle.class); - ContentFontStyle parentContentFontStyle = clazz.getAnnotation(ContentFontStyle.class); - Map fieldContentMap = MapUtils.newHashMapWithExpectedSize( - tempFieldList.size()); - for (Field field : tempFieldList) { - ExcelContentProperty excelContentProperty = new ExcelContentProperty(); - excelContentProperty.setField(field); - - ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class); - if (excelProperty != null) { - Class> convertClazz = excelProperty.converter(); - if (convertClazz != AutoConverter.class) { - try { - Converter converter = convertClazz.getDeclaredConstructor().newInstance(); - excelContentProperty.setConverter(converter); - } catch (Exception e) { - throw new ExcelCommonException( - "Can not instance custom converter:" + convertClazz.getName()); - } - } + switch (configurationHolder.globalConfiguration().getFiledCacheLocation()) { + case THREAD_LOCAL: + Map, Map> classContentCacheMap + = CLASS_CONTENT_THREAD_LOCAL.get(); + if (classContentCacheMap == null) { + classContentCacheMap = MapUtils.newHashMap(); + CLASS_CONTENT_THREAD_LOCAL.set(classContentCacheMap); } + return classContentCacheMap.computeIfAbsent(clazz, key -> { + return doDeclaredFieldContentMap(clazz); + }); + case MEMORY: + return CLASS_CONTENT_CACHE.computeIfAbsent(clazz, key -> { + return doDeclaredFieldContentMap(clazz); + }); + case NONE: + return doDeclaredFieldContentMap(clazz); + default: + throw new UnsupportedOperationException("unsupported enum"); + } - ContentStyle contentStyle = field.getAnnotation(ContentStyle.class); - if (contentStyle == null) { - contentStyle = parentContentStyle; - } - excelContentProperty.setContentStyleProperty(StyleProperty.build(contentStyle)); + } + + private static Map doDeclaredFieldContentMap(Class clazz) { + if (clazz == null) { + return null; + } + List tempFieldList = new ArrayList<>(); + Class tempClass = clazz; + while (tempClass != null) { + Collections.addAll(tempFieldList, tempClass.getDeclaredFields()); + // Get the parent class and give it to yourself + tempClass = tempClass.getSuperclass(); + } - ContentFontStyle contentFontStyle = field.getAnnotation(ContentFontStyle.class); - if (contentFontStyle == null) { - contentFontStyle = parentContentFontStyle; + ContentStyle parentContentStyle = clazz.getAnnotation(ContentStyle.class); + ContentFontStyle parentContentFontStyle = clazz.getAnnotation(ContentFontStyle.class); + Map fieldContentMap = MapUtils.newHashMapWithExpectedSize( + tempFieldList.size()); + for (Field field : tempFieldList) { + ExcelContentProperty excelContentProperty = new ExcelContentProperty(); + excelContentProperty.setField(field); + + ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class); + if (excelProperty != null) { + Class> convertClazz = excelProperty.converter(); + if (convertClazz != AutoConverter.class) { + try { + Converter converter = convertClazz.getDeclaredConstructor().newInstance(); + excelContentProperty.setConverter(converter); + } catch (Exception e) { + throw new ExcelCommonException( + "Can not instance custom converter:" + convertClazz.getName()); + } } - excelContentProperty.setContentFontProperty(FontProperty.build(contentFontStyle)); + } - excelContentProperty.setDateTimeFormatProperty( - DateTimeFormatProperty.build(field.getAnnotation(DateTimeFormat.class))); - excelContentProperty.setNumberFormatProperty( - NumberFormatProperty.build(field.getAnnotation(NumberFormat.class))); + ContentStyle contentStyle = field.getAnnotation(ContentStyle.class); + if (contentStyle == null) { + contentStyle = parentContentStyle; + } + excelContentProperty.setContentStyleProperty(StyleProperty.build(contentStyle)); - fieldContentMap.put(field.getName(), excelContentProperty); + ContentFontStyle contentFontStyle = field.getAnnotation(ContentFontStyle.class); + if (contentFontStyle == null) { + contentFontStyle = parentContentFontStyle; } - return fieldContentMap; - }); + excelContentProperty.setContentFontProperty(FontProperty.build(contentFontStyle)); + + excelContentProperty.setDateTimeFormatProperty( + DateTimeFormatProperty.build(field.getAnnotation(DateTimeFormat.class))); + excelContentProperty.setNumberFormatProperty( + NumberFormatProperty.build(field.getAnnotation(NumberFormat.class))); + + fieldContentMap.put(field.getName(), excelContentProperty); + } + return fieldContentMap; } /** * Parsing field in the class * - * @param clazz Need to parse the class - * @param sortedAllFieldMap Complete the map of sorts - * @param indexFieldMap Use the index to sort fields - * @param ignoreMap You want to ignore field map - * @param needIgnore If you want to ignore fields need to ignore - * @param holder holder + * @param clazz Need to parse the class + * @param needIgnore If you want to ignore fields need to ignore + * @param holder holder + * @param cacheLocation cache lcation */ - public static void declaredFields(Class clazz, Map sortedAllFieldMap, - Map indexFieldMap, Map ignoreMap, Boolean needIgnore, Holder holder) { - FieldCache fieldCache = declaredFields(clazz); - if (fieldCache == null) { - return; + public static FieldCache declaredFields(Class clazz, ConfigurationHolder configurationHolder) { + switch (configurationHolder.globalConfiguration().getFiledCacheLocation()) { + case THREAD_LOCAL: + Map, FieldCache> fieldCacheMap = FIELD_THREAD_LOCAL.get(); + if (fieldCacheMap == null) { + fieldCacheMap = MapUtils.newHashMap(); + FIELD_THREAD_LOCAL.set(fieldCacheMap); + } + return fieldCacheMap.computeIfAbsent(clazz, key -> { + return doDeclaredFields(clazz, configurationHolder); + }); + case MEMORY: + return FIELD_CACHE.computeIfAbsent(clazz, key -> { + return doDeclaredFields(clazz, configurationHolder); + }); + case NONE: + return doDeclaredFields(clazz, configurationHolder); + default: + throw new UnsupportedOperationException("unsupported enum"); } - if (ignoreMap != null) { - ignoreMap.putAll(fieldCache.getIgnoreMap()); + } + + private static FieldCache doDeclaredFields(Class clazz, ConfigurationHolder configurationHolder) { + List tempFieldList = new ArrayList<>(); + Class tempClass = clazz; + // When the parent class is null, it indicates that the parent class (Object class) has reached the top + // level. + while (tempClass != null) { + Collections.addAll(tempFieldList, tempClass.getDeclaredFields()); + // Get the parent class and give it to yourself + tempClass = tempClass.getSuperclass(); } - Map tempIndexFieldMap = indexFieldMap; - if (tempIndexFieldMap == null) { - tempIndexFieldMap = MapUtils.newTreeMap(); + // Screening of field + Map> orderFieldMap = new TreeMap>(); + Map indexFieldMap = new TreeMap(); + Map ignoreMap = new HashMap(16); + + ExcelIgnoreUnannotated excelIgnoreUnannotated = clazz.getAnnotation(ExcelIgnoreUnannotated.class); + for (Field field : tempFieldList) { + declaredOneField(field, orderFieldMap, indexFieldMap, ignoreMap, excelIgnoreUnannotated); } - tempIndexFieldMap.putAll(fieldCache.getIndexFieldMap()); + Map sortedFieldMap = buildSortedAllFieldMap(orderFieldMap, indexFieldMap); + FieldCache fieldCache = new FieldCache(sortedFieldMap, indexFieldMap, ignoreMap); - Map originSortedAllFieldMap = fieldCache.getSortedAllFieldMap(); - if (!needIgnore) { - sortedAllFieldMap.putAll(originSortedAllFieldMap); - return; + if (!(configurationHolder instanceof WriteHolder)) { + return fieldCache; } + WriteHolder writeHolder = (WriteHolder)configurationHolder; + + boolean needIgnore = !CollectionUtils.isEmpty(writeHolder.excludeColumnFieldNames()) + || !CollectionUtils.isEmpty(writeHolder.excludeColumnIndexes()) + || !CollectionUtils.isEmpty(writeHolder.includeColumnFieldNames()) + || !CollectionUtils.isEmpty(writeHolder.includeColumnIndexes()); + + if (!needIgnore) { + return fieldCache; + } + // ignore filed + Map tempSortedFieldMapp = MapUtils.newHashMap(); int index = 0; - for (Map.Entry entry : originSortedAllFieldMap.entrySet()) { + for (Map.Entry entry : sortedFieldMap.entrySet()) { Integer key = entry.getKey(); Field field = entry.getValue(); // The current field needs to be ignored - if (((WriteHolder)holder).ignore(entry.getValue().getName(), entry.getKey())) { + if (writeHolder.ignore(entry.getValue().getName(), entry.getKey())) { if (ignoreMap != null) { ignoreMap.put(field.getName(), field); } - tempIndexFieldMap.remove(index); + indexFieldMap.remove(index); } else { // Mandatory sorted fields - if (tempIndexFieldMap.containsKey(key)) { - sortedAllFieldMap.put(key, field); + if (indexFieldMap.containsKey(key)) { + tempSortedFieldMapp.put(key, field); } else { // Need to reorder automatically // Check whether the current key is already in use - while (sortedAllFieldMap.containsKey(index)) { + while (tempSortedFieldMapp.containsKey(index)) { index++; } - sortedAllFieldMap.put(index++, field); + tempSortedFieldMapp.put(index++, field); } } } - forceIndexIfNecessary(holder, sortedAllFieldMap); + fieldCache.setSortedFieldMap(tempSortedFieldMapp); + + // resort field + resortField(writeHolder, fieldCache); + return fieldCache; } /** - * it only works when {@link AbstractWriteHolder#getIncludeColumnFieldNames()} has value - * and {@link AbstractWriteHolder#getForceIndex()} is true + * it only works when {@link WriteHolder#getIncludeColumnFieldNames()} or + * {@link WriteHolder#getIncludeColumnIndexes()} ()} has value + * and {@link WriteHolder#getSortByIncludeColumn()} ()} is true **/ - private static void forceIndexIfNecessary(Holder holder, Map sortedAllFieldMap) { - if (!(holder instanceof AbstractWriteHolder)) { + private static void resortField(WriteHolder writeHolder, FieldCache fieldCache) { + if (!writeHolder.sortByIncludeColumn()) { return; } - AbstractWriteHolder writeHolder = (AbstractWriteHolder)holder; - Collection allCol = writeHolder.getIncludeColumnFieldNames(); - if (!CollectionUtils.isEmpty(allCol) && writeHolder.getForceIndex() != null && writeHolder.getForceIndex()) { - Map colIndexMap = MapUtils.newHashMap(); - Iterator iterator = allCol.iterator(); - int colIndex = 0; - while (iterator.hasNext()) { - String col = iterator.next(); - colIndexMap.put(col, colIndex); - colIndex++; + Map indexFieldMap = fieldCache.getIndexFieldMap(); + + Collection includeColumnFieldNames = writeHolder.includeColumnFieldNames(); + if (!CollectionUtils.isEmpty(includeColumnFieldNames)) { + // Field sorted map + Map filedIndexMap = MapUtils.newHashMap(); + int fieldIndex = 0; + for (String includeColumnFieldName : includeColumnFieldNames) { + filedIndexMap.put(includeColumnFieldName, fieldIndex++); } - Map temp = MapUtils.newHashMap(); - sortedAllFieldMap.forEach((index, field) -> { - Integer fieldIndex = colIndexMap.get(field.getName()); - temp.put(fieldIndex, field); + + // rebuild sortedFieldMap + Map tempSortedFieldMap = MapUtils.newHashMap(); + fieldCache.getSortedFieldMap().forEach((index, field) -> { + Integer tempFieldIndex = filedIndexMap.get(field.getName()); + if (tempFieldIndex != null) { + tempSortedFieldMap.put(tempFieldIndex, field); + + // The user has redefined the ordering and the ordering of annotations needs to be invalidated + if (!tempFieldIndex.equals(index)) { + indexFieldMap.remove(index); + } + } }); - sortedAllFieldMap.clear(); - sortedAllFieldMap.putAll(temp); + fieldCache.setSortedFieldMap(tempSortedFieldMap); + return; } - } - public static void declaredFields(Class clazz, Map sortedAllFieldMap, Boolean needIgnore, - WriteHolder writeHolder) { - declaredFields(clazz, sortedAllFieldMap, null, null, needIgnore, writeHolder); - } + Collection includeColumnIndexes = writeHolder.includeColumnIndexes(); + if (!CollectionUtils.isEmpty(includeColumnFieldNames)) { + // Index sorted map + Map filedIndexMap = MapUtils.newHashMap(); + int fieldIndex = 0; + for (Integer includeColumnIndexe : includeColumnIndexes) { + filedIndexMap.put(includeColumnIndexe, fieldIndex++); + } - private static FieldCache declaredFields(Class clazz) { - if (clazz == null) { - return null; + // rebuild sortedFieldMap + Map tempSortedFieldMap = MapUtils.newHashMap(); + fieldCache.getSortedFieldMap().forEach((index, field) -> { + Integer tempFieldIndex = filedIndexMap.get(index); + + // The user has redefined the ordering and the ordering of annotations needs to be invalidated + if (tempFieldIndex != null) { + tempSortedFieldMap.put(tempFieldIndex, field); + } + }); + fieldCache.setSortedFieldMap(tempSortedFieldMap); } - return FIELD_CACHE.computeIfAbsent(clazz, key -> { - List tempFieldList = new ArrayList<>(); - Class tempClass = clazz; - // When the parent class is null, it indicates that the parent class (Object class) has reached the top - // level. - while (tempClass != null) { - Collections.addAll(tempFieldList, tempClass.getDeclaredFields()); - // Get the parent class and give it to yourself - tempClass = tempClass.getSuperclass(); - } - // Screening of field - Map> orderFieldMap = new TreeMap>(); - Map indexFieldMap = new TreeMap(); - Map ignoreMap = new HashMap(16); - - ExcelIgnoreUnannotated excelIgnoreUnannotated = clazz.getAnnotation(ExcelIgnoreUnannotated.class); - for (Field field : tempFieldList) { - declaredOneField(field, orderFieldMap, indexFieldMap, ignoreMap, excelIgnoreUnannotated); - } - return new FieldCache(buildSortedAllFieldMap(orderFieldMap, indexFieldMap), indexFieldMap, ignoreMap); - }); } private static Map buildSortedAllFieldMap(Map> orderFieldMap, @@ -380,32 +493,6 @@ public class ClassUtils { orderFieldList.add(field); } - private static class FieldCache { - - private final Map sortedAllFieldMap; - private final Map indexFieldMap; - private final Map ignoreMap; - - public FieldCache(Map sortedAllFieldMap, Map indexFieldMap, - Map ignoreMap) { - this.sortedAllFieldMap = sortedAllFieldMap; - this.indexFieldMap = indexFieldMap; - this.ignoreMap = ignoreMap; - } - - public Map getSortedAllFieldMap() { - return sortedAllFieldMap; - } - - public Map getIndexFieldMap() { - return indexFieldMap; - } - - public Map getIgnoreMap() { - return ignoreMap; - } - } - /** *

Gets a {@code List} of all interfaces implemented by the given * class and its superclasses.

@@ -459,4 +546,10 @@ public class ClassUtils { private Class headClass; private String fieldName; } + + public static void removeThreadLocalCache() { + FIELD_THREAD_LOCAL.remove(); + CLASS_CONTENT_THREAD_LOCAL.remove(); + CONTENT_THREAD_LOCAL.remove(); + } } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java index 89ff01a3..f7f9416c 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java @@ -122,11 +122,12 @@ public abstract class AbstractExcelWriterParameterBuilder sortedAllFieldMap = new TreeMap<>(); int relativeRowIndex = 0; for (Object oneRowData : data) { int lastRowIndex = relativeRowIndex + newRowIndex; - addOneRowOfDataToExcel(oneRowData, lastRowIndex, relativeRowIndex, sortedAllFieldMap); + addOneRowOfDataToExcel(oneRowData, lastRowIndex, relativeRowIndex); relativeRowIndex++; } } - private void addOneRowOfDataToExcel(Object oneRowData, int rowIndex, int relativeRowIndex, - Map sortedAllFieldMap) { + private void addOneRowOfDataToExcel(Object oneRowData, int rowIndex, int relativeRowIndex) { if (oneRowData == null) { return; } @@ -79,7 +77,7 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { } else if (oneRowData instanceof Map) { addBasicTypeToExcel(new MapRowData((Map)oneRowData), row, rowIndex, relativeRowIndex); } else { - addJavaObjectToExcel(oneRowData, row, rowIndex, relativeRowIndex, sortedAllFieldMap); + addJavaObjectToExcel(oneRowData, row, rowIndex, relativeRowIndex); } WriteHandlerUtils.afterRowDispose(rowWriteHandlerContext); @@ -119,7 +117,7 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { int dataIndex, int columnIndex) { ExcelContentProperty excelContentProperty = ClassUtils.declaredExcelContentProperty(null, writeContext.currentWriteHolder().excelWriteHeadProperty().getHeadClazz(), - head == null ? null : head.getFieldName()); + head == null ? null : head.getFieldName(), writeContext.currentWriteHolder()); CellWriteHandlerContext cellWriteHandlerContext = WriteHandlerUtils.createCellWriteHandlerContext(writeContext, row, rowIndex, head, columnIndex, relativeRowIndex, Boolean.FALSE, excelContentProperty); @@ -138,8 +136,7 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { WriteHandlerUtils.afterCellDispose(cellWriteHandlerContext); } - private void addJavaObjectToExcel(Object oneRowData, Row row, int rowIndex, int relativeRowIndex, - Map sortedAllFieldMap) { + private void addJavaObjectToExcel(Object oneRowData, Row row, int rowIndex, int relativeRowIndex) { WriteHolder currentWriteHolder = writeContext.currentWriteHolder(); BeanMap beanMap = BeanMapUtils.create(oneRowData); // Bean the contains of the Map Key method with poor performance,So to create a keySet here @@ -158,7 +155,7 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { } ExcelContentProperty excelContentProperty = ClassUtils.declaredExcelContentProperty(beanMap, - currentWriteHolder.excelWriteHeadProperty().getHeadClazz(), name); + currentWriteHolder.excelWriteHeadProperty().getHeadClazz(), name, currentWriteHolder); CellWriteHandlerContext cellWriteHandlerContext = WriteHandlerUtils.createCellWriteHandlerContext( writeContext, row, rowIndex, head, columnIndex, relativeRowIndex, Boolean.FALSE, excelContentProperty); @@ -185,19 +182,17 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { } maxCellIndex++; - Map ignoreMap = writeContext.currentWriteHolder().excelWriteHeadProperty().getIgnoreMap(); - initSortedAllFieldMapFieldList(oneRowData.getClass(), sortedAllFieldMap); - for (Map.Entry entry : sortedAllFieldMap.entrySet()) { + FieldCache fieldCache = ClassUtils.declaredFields(oneRowData.getClass(), writeContext.currentWriteHolder()); + for (Map.Entry entry : fieldCache.getSortedFieldMap().entrySet()) { Field field = entry.getValue(); String fieldName = FieldUtils.resolveCglibFieldName(field); - boolean uselessData = !beanKeySet.contains(fieldName) || beanMapHandledSet.contains(fieldName) - || ignoreMap.containsKey(fieldName); + boolean uselessData = !beanKeySet.contains(fieldName) || beanMapHandledSet.contains(fieldName); if (uselessData) { continue; } Object value = beanMap.get(fieldName); ExcelContentProperty excelContentProperty = ClassUtils.declaredExcelContentProperty(beanMap, - currentWriteHolder.excelWriteHeadProperty().getHeadClazz(), fieldName); + currentWriteHolder.excelWriteHeadProperty().getHeadClazz(), fieldName, currentWriteHolder); CellWriteHandlerContext cellWriteHandlerContext = WriteHandlerUtils.createCellWriteHandlerContext( writeContext, row, rowIndex, null, maxCellIndex, relativeRowIndex, Boolean.FALSE, excelContentProperty); WriteHandlerUtils.beforeCellCreate(cellWriteHandlerContext); @@ -229,7 +224,7 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { .isEmpty(writeSheetHolder.getExcludeColumnIndexes()) || !CollectionUtils .isEmpty(writeSheetHolder.getIncludeColumnFieldNames()) || !CollectionUtils .isEmpty(writeSheetHolder.getIncludeColumnIndexes()); - ClassUtils.declaredFields(clazz, sortedAllFieldMap, needIgnore, writeSheetHolder); + ClassUtils.declaredFields(clazz, writeSheetHolder); } } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java index f6dc1955..81524223 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java @@ -37,7 +37,9 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; import org.apache.commons.collections4.CollectionUtils; + import com.alibaba.excel.util.PoiUtils; + import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellType; @@ -215,7 +217,8 @@ public class ExcelWriteFillExecutor extends AbstractExcelWriteExecutor { } Object value = dataMap.get(variable); ExcelContentProperty excelContentProperty = ClassUtils.declaredExcelContentProperty(dataMap, - writeContext.currentWriteHolder().excelWriteHeadProperty().getHeadClazz(), variable); + writeContext.currentWriteHolder().excelWriteHeadProperty().getHeadClazz(), variable, + writeContext.currentWriteHolder()); cellWriteHandlerContext.setExcelContentProperty(excelContentProperty); createCell(analysisCell, fillConfig, cellWriteHandlerContext, rowWriteHandlerContext); @@ -249,7 +252,8 @@ public class ExcelWriteFillExecutor extends AbstractExcelWriteExecutor { } Object value = dataMap.get(variable); ExcelContentProperty excelContentProperty = ClassUtils.declaredExcelContentProperty(dataMap, - writeContext.currentWriteHolder().excelWriteHeadProperty().getHeadClazz(), variable); + writeContext.currentWriteHolder().excelWriteHeadProperty().getHeadClazz(), variable, + writeContext.currentWriteHolder()); cellWriteHandlerContext.setOriginalValue(value); cellWriteHandlerContext.setOriginalFieldClass(FieldUtils.getFieldClass(dataMap, variable, value)); cellWriteHandlerContext.setExcelContentProperty(excelContentProperty); diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java index 313d766d..68cc09c9 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java @@ -56,8 +56,11 @@ public class WriteBasicParameter extends BasicParameter { * Only output the custom columns. */ private Collection includeColumnFieldNames; + /** - * head sorted use includeColumnFieldNames sort + * Data will be sorted according to {@link #includeColumnFieldNames} or {@link #includeColumnIndexes}. + * + * default is false. */ - private Boolean forceIndex; + private Boolean sortByIncludeColumn; } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java index 4d7bc476..11566e77 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java @@ -14,6 +14,7 @@ import com.alibaba.excel.converters.Converter; import com.alibaba.excel.converters.ConverterKeyBuild; import com.alibaba.excel.converters.DefaultConverterLoader; import com.alibaba.excel.enums.HeadKindEnum; +import com.alibaba.excel.enums.HolderEnum; import com.alibaba.excel.event.NotRepeatExecutor; import com.alibaba.excel.metadata.AbstractHolder; import com.alibaba.excel.metadata.Head; @@ -94,10 +95,14 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ * Only output the custom columns. */ private Collection includeColumnFieldNames; + /** - * head sorted use {@link #includeColumnFieldNames} sort + * Data will be sorted according to {@link #includeColumnFieldNames} or {@link #includeColumnIndexes}. + * + * default is false. */ - private Boolean forceIndex; + private Boolean sortByIncludeColumn; + /** * Write handler */ @@ -197,11 +202,17 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ } else { this.includeColumnFieldNames = writeBasicParameter.getIncludeColumnFieldNames(); } - if (writeBasicParameter.getForceIndex() == null && parentAbstractWriteHolder != null) { - this.forceIndex = parentAbstractWriteHolder.getForceIndex(); + + if (writeBasicParameter.getSortByIncludeColumn() == null) { + if (parentAbstractWriteHolder == null) { + this.sortByIncludeColumn = Boolean.FALSE; + } else { + this.sortByIncludeColumn = parentAbstractWriteHolder.getSortByIncludeColumn(); + } } else { - this.forceIndex = writeBasicParameter.getForceIndex(); + this.sortByIncludeColumn = writeBasicParameter.getSortByIncludeColumn(); } + if (writeBasicParameter.getIncludeColumnIndexes() == null && parentAbstractWriteHolder != null) { this.includeColumnIndexes = parentAbstractWriteHolder.getIncludeColumnIndexes(); } else { @@ -488,4 +499,28 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ return getAutomaticMergeHead(); } + @Override + public boolean sortByIncludeColumn() { + return getSortByIncludeColumn(); + } + + @Override + public Collection includeColumnIndexes() { + return getIncludeColumnIndexes(); + } + + @Override + public Collection includeColumnFieldNames() { + return getIncludeColumnFieldNames(); + } + + @Override + public Collection excludeColumnIndexes() { + return getExcludeColumnIndexes(); + } + + @Override + public Collection excludeColumnFieldNames() { + return getExcludeColumnFieldNames(); + } } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java index 77f3c14f..3f60a4d9 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java @@ -1,10 +1,11 @@ package com.alibaba.excel.write.metadata.holder; +import java.util.Collection; + import com.alibaba.excel.metadata.ConfigurationHolder; import com.alibaba.excel.write.property.ExcelWriteHeadProperty; /** - * * Get the corresponding Holder * * @author Jiaju Zhuang @@ -46,4 +47,30 @@ public interface WriteHolder extends ConfigurationHolder { * @return */ int relativeHeadRowIndex(); + + /** + * Data will be sorted according to {@link #includeColumnFieldNames} or {@link #includeColumnIndexes}. + * + * default is false. + */ + boolean sortByIncludeColumn(); + + /** + * Only output the custom columns. + */ + Collection includeColumnIndexes(); + + /** + * Only output the custom columns. + */ + Collection includeColumnFieldNames(); + + /** + * Ignore the custom columns. + */ + Collection excludeColumnIndexes(); + /** + * Ignore the custom columns. + */ + Collection excludeColumnFieldNames(); } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java index 7cc23917..37d91975 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java @@ -11,6 +11,7 @@ import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; +import com.alibaba.excel.enums.CacheLocationEnum; import com.alibaba.excel.enums.HolderEnum; import com.alibaba.excel.exception.ExcelGenerateException; import com.alibaba.excel.metadata.data.DataFormatData; diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/property/ExcelWriteHeadProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/property/ExcelWriteHeadProperty.java index 4c11010a..7affadbe 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/property/ExcelWriteHeadProperty.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/property/ExcelWriteHeadProperty.java @@ -16,6 +16,7 @@ import com.alibaba.excel.annotation.write.style.HeadStyle; import com.alibaba.excel.annotation.write.style.OnceAbsoluteMerge; import com.alibaba.excel.enums.HeadKindEnum; import com.alibaba.excel.metadata.CellRange; +import com.alibaba.excel.metadata.ConfigurationHolder; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.metadata.Holder; import com.alibaba.excel.metadata.property.ColumnWidthProperty; @@ -44,8 +45,8 @@ public class ExcelWriteHeadProperty extends ExcelHeadProperty { private RowHeightProperty contentRowHeightProperty; private OnceAbsoluteMergeProperty onceAbsoluteMergeProperty; - public ExcelWriteHeadProperty(Holder holder, Class headClazz, List> head) { - super(holder, headClazz, head); + public ExcelWriteHeadProperty(ConfigurationHolder configurationHolder, Class headClazz, List> head) { + super(configurationHolder, headClazz, head); if (getHeadKind() != HeadKindEnum.CLASS) { return; } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java index 6bd824db..578b5a63 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java @@ -34,9 +34,9 @@ public class ExcludeOrIncludeDataTest { private static File includeFieldName07; private static File includeFieldName03; private static File includeFieldNameCsv; - private static File includeFieldNameForceIndex07; - private static File includeFieldNameForceIndex03; - private static File includeFieldNameForceIndexCsv; + private static File includeFieldNameSort07; + private static File includeFieldNameSort03; + private static File includeFieldNameSortCsv; @BeforeClass public static void init() { @@ -52,9 +52,9 @@ public class ExcludeOrIncludeDataTest { includeFieldName07 = TestFileUtil.createNewFile("includeFieldName.xlsx"); includeFieldName03 = TestFileUtil.createNewFile("includeFieldName.xls"); includeFieldNameCsv = TestFileUtil.createNewFile("includeFieldName.csv"); - includeFieldNameForceIndex07 = TestFileUtil.createNewFile("includeFieldNameForceIndex.xlsx"); - includeFieldNameForceIndex03 = TestFileUtil.createNewFile("includeFieldNameForceIndex.xls"); - includeFieldNameForceIndexCsv = TestFileUtil.createNewFile("includeFieldNameForceIndex.csv"); + includeFieldNameSort07 = TestFileUtil.createNewFile("includeFieldNameSort.xlsx"); + includeFieldNameSort03 = TestFileUtil.createNewFile("includeFieldNameSort.xls"); + includeFieldNameSortCsv = TestFileUtil.createNewFile("includeFieldNameSort.csv"); } @Test @@ -197,7 +197,7 @@ public class ExcludeOrIncludeDataTest { includeColumnFieldNames.add("column3"); includeColumnFieldNames.add("column2"); EasyExcel.write(file, ExcludeOrIncludeData.class).includeColumnFieldNames(includeColumnFieldNames) - .forceIndex(true).sheet().doWrite(data()); + .sortByIncludeColumn(true).sheet().doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); Assert.assertEquals(1, dataMap.size()); Map record = dataMap.get(0); diff --git a/update.md b/update.md index 76f8aa1a..1c820ec8 100644 --- a/update.md +++ b/update.md @@ -5,7 +5,10 @@ * xlsx存在隐藏字符时需要忽略,确保和展示看到的一样 * 新增`commons-io` 2.11.0 包 * 在`easyexcel-parent` 包中移除测试包的`dependencyManagement` -* 删除`org.apache.poi.hssf.usermodel.PoiUtils.java`, 使用反射获取 [Issue #2804](https://github.com/alibaba/easyexcel/issues/2804) +* 删除`org.apache.poi.hssf.usermodel.PoiUtils.java`, + 使用反射获取 [Issue #2804](https://github.com/alibaba/easyexcel/issues/2804) +* 默认对象反射缓存改成`ThreadLocal`,并支持设置 [Issue #2792](https://github.com/alibaba/easyexcel/issues/2792) +* 支持根据`includeColumnIndexes`和`includeColumnFieldNames`排序 [Issue #2697](https://github.com/alibaba/easyexcel/issues/2697) # 3.2.1 From 70d601e3dd906b66de6b1169566278bb9103f14d Mon Sep 17 00:00:00 2001 From: jipengfei-jpf <1558143046@qq.com> Date: Mon, 1 May 2023 20:18:57 +0800 Subject: [PATCH 30/53] Update README.md OK --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index efee515e..124733cf 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # 🔥作者最新开源项目[Chat2DB](https://github.com/alibaba/Chat2DB) -Chat2DB是一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) +[Chat2DB](https://github.com/alibaba/Chat2DB) 是一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) EasyExcel ====================== From 80689513c3e25c068ca31db73465759ae46df3a7 Mon Sep 17 00:00:00 2001 From: jipengfei-jpf <1558143046@qq.com> Date: Tue, 2 May 2023 12:59:15 +0800 Subject: [PATCH 31/53] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 124733cf..b5ac85cd 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # 🔥作者最新开源项目[Chat2DB](https://github.com/alibaba/Chat2DB) -[Chat2DB](https://github.com/alibaba/Chat2DB) 是一个集成了ChatGPT 可以AI自动生成SQL的智能数据库客户端, GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) +[Chat2DB](https://github.com/alibaba/Chat2DB) 智能数据库客户端,比Navicat、DataGrip更加智能,体验更好。 GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) EasyExcel ====================== From 78e65376839edfa8b88c45c8c97515af09e0e6ae Mon Sep 17 00:00:00 2001 From: jipengfei-jpf <1558143046@qq.com> Date: Tue, 2 May 2023 12:59:44 +0800 Subject: [PATCH 32/53] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b5ac85cd..24423929 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # 🔥作者最新开源项目[Chat2DB](https://github.com/alibaba/Chat2DB) -[Chat2DB](https://github.com/alibaba/Chat2DB) 智能数据库客户端,比Navicat、DataGrip更加智能,体验更好。 GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) +[Chat2DB](https://github.com/alibaba/Chat2DB) 智能数据库客户端,比Navicat、DataGrip更智能,体验更好。 GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) EasyExcel ====================== From f8eb6729cb07429351563d50997efbfdd1f784cb Mon Sep 17 00:00:00 2001 From: jipengfei-jpf <1558143046@qq.com> Date: Tue, 2 May 2023 13:00:05 +0800 Subject: [PATCH 33/53] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 24423929..bbf18017 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # 🔥作者最新开源项目[Chat2DB](https://github.com/alibaba/Chat2DB) -[Chat2DB](https://github.com/alibaba/Chat2DB) 智能数据库客户端,比Navicat、DataGrip更智能,体验更好。 GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) +[Chat2DB](https://github.com/alibaba/Chat2DB) 智能数据库客户端,比Navicat、DataGrip更智能,体验更好,永久免费无需破解。 GitHub地址 [https://github.com/alibaba/Chat2DB](https://github.com/alibaba/Chat2DB) EasyExcel ====================== From 85d4264415a1880f6c5c3b1788607f8b9cce2d25 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Thu, 4 May 2023 16:30:10 +0800 Subject: [PATCH 34/53] =?UTF-8?q?*=20=E9=BB=98=E8=AE=A4=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E5=8F=8D=E5=B0=84=E7=BC=93=E5=AD=98=E6=94=B9=E6=88=90`ThreadLo?= =?UTF-8?q?cal`,=E5=B9=B6=E6=94=AF=E6=8C=81=E8=AE=BE=E7=BD=AE=E5=8F=8D?= =?UTF-8?q?=E5=B0=84=E7=BC=93=E5=AD=98=E7=B1=BB=E5=9E=8B=20[Issue=20#2792]?= =?UTF-8?q?(https://github.com/alibaba/easyexcel/issues/2792)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metadata/AbstractParameterBuilder.java | 11 + .../alibaba/excel/metadata/FieldCache.java | 10 +- .../alibaba/excel/metadata/FieldWrapper.java | 43 ++++ .../excel/metadata/GlobalConfiguration.java | 2 +- .../metadata/property/ExcelHeadProperty.java | 19 +- .../com/alibaba/excel/util/ClassUtils.java | 95 ++++---- .../AbstractExcelWriterParameterBuilder.java | 6 +- .../write/executor/ExcelWriteAddExecutor.java | 21 +- .../write/metadata/WriteBasicParameter.java | 4 +- .../metadata/holder/AbstractWriteHolder.java | 17 +- .../write/metadata/holder/WriteHolder.java | 4 +- .../easyexcel/test/core/cache/CacheData.java | 21 ++ .../test/core/cache/CacheDataTest.java | 219 ++++++++++++++++++ .../test/core/cache/CacheInvokeData.java | 21 ++ .../core/cache/CacheInvokeMemoryData.java | 21 ++ .../ExcludeOrIncludeDataTest.java | 84 +++++-- update.md | 5 +- 17 files changed, 490 insertions(+), 113 deletions(-) create mode 100644 easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldWrapper.java create mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheData.java create mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheDataTest.java create mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheInvokeData.java create mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheInvokeMemoryData.java diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java index 319c5ab6..7dc50c76 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Locale; import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CacheLocationEnum; import com.alibaba.excel.util.ListUtils; /** @@ -73,6 +74,16 @@ public abstract class AbstractParameterBuilder sortedFieldMap; + private Map sortedFieldMap; /** * Fields using the index attribute */ - private Map indexFieldMap; - - /** - * Fields to ignore - */ - private Map ignoreMap; + private Map indexFieldMap; } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldWrapper.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldWrapper.java new file mode 100644 index 00000000..bfe9321e --- /dev/null +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/FieldWrapper.java @@ -0,0 +1,43 @@ +package com.alibaba.excel.metadata; + +import java.lang.reflect.Field; +import java.util.Map; +import java.util.Set; + +import com.alibaba.excel.annotation.ExcelProperty; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * filed wrapper + * + * @author Jiaju Zhuang + */ +@Getter +@Setter +@EqualsAndHashCode +@AllArgsConstructor +@NoArgsConstructor +public class FieldWrapper { + + /** + * field + */ + private Field field; + + /** + * The field name matching cglib + */ + private String fieldName; + + /** + * The name of the sheet header. + * + * @see ExcelProperty + */ + private String[] heads; +} diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java index e11f6e9d..fe823dad 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java @@ -54,6 +54,6 @@ public class GlobalConfiguration { this.use1904windowing = Boolean.FALSE; this.locale = Locale.getDefault(); this.useScientificFormat = Boolean.FALSE; - this.filedCacheLocation = CacheLocationEnum.MEMORY; + this.filedCacheLocation = CacheLocationEnum.THREAD_LOCAL; } } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java index c8bc36d7..ce00e2eb 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java @@ -11,6 +11,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.enums.HeadKindEnum; import com.alibaba.excel.metadata.ConfigurationHolder; import com.alibaba.excel.metadata.FieldCache; +import com.alibaba.excel.metadata.FieldWrapper; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.metadata.Holder; import com.alibaba.excel.util.ClassUtils; @@ -107,7 +108,7 @@ public class ExcelHeadProperty { } FieldCache fieldCache = ClassUtils.declaredFields(headClazz, configurationHolder); - for (Map.Entry entry : fieldCache.getSortedFieldMap().entrySet()) { + for (Map.Entry entry : fieldCache.getSortedFieldMap().entrySet()) { initOneColumnProperty(entry.getKey(), entry.getValue(), fieldCache.getIndexFieldMap().containsKey(entry.getKey())); } @@ -122,22 +123,20 @@ public class ExcelHeadProperty { * @param forceIndex * @return Ignore current field */ - private void initOneColumnProperty(int index, Field field, Boolean forceIndex) { - ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class); - List tmpHeadList = new ArrayList(); - String fieldName = FieldUtils.resolveCglibFieldName(field); - boolean notForceName = excelProperty == null || excelProperty.value().length <= 0 - || (excelProperty.value().length == 1 && StringUtils.isEmpty((excelProperty.value())[0])); + private void initOneColumnProperty(int index, FieldWrapper field, Boolean forceIndex) { + List tmpHeadList = new ArrayList<>(); + boolean notForceName = field.getHeads() == null || field.getHeads().length == 0 + || (field.getHeads().length == 1 && StringUtils.isEmpty(field.getHeads()[0])); if (headMap.containsKey(index)) { tmpHeadList.addAll(headMap.get(index).getHeadNameList()); } else { if (notForceName) { - tmpHeadList.add(fieldName); + tmpHeadList.add(field.getFieldName()); } else { - Collections.addAll(tmpHeadList, excelProperty.value()); + Collections.addAll(tmpHeadList, field.getHeads()); } } - Head head = new Head(index, field, fieldName, tmpHeadList, forceIndex, !notForceName); + Head head = new Head(index, field.getField(), field.getFieldName(), tmpHeadList, forceIndex, !notForceName); headMap.put(index, head); } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index d0a99c00..c5062176 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -1,5 +1,6 @@ package com.alibaba.excel.util; +import java.io.FileWriter; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; @@ -7,14 +8,14 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.TreeMap; +import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; @@ -25,17 +26,16 @@ import com.alibaba.excel.annotation.write.style.ContentFontStyle; import com.alibaba.excel.annotation.write.style.ContentStyle; import com.alibaba.excel.converters.AutoConverter; import com.alibaba.excel.converters.Converter; -import com.alibaba.excel.enums.CacheLocationEnum; import com.alibaba.excel.exception.ExcelCommonException; import com.alibaba.excel.metadata.ConfigurationHolder; import com.alibaba.excel.metadata.FieldCache; -import com.alibaba.excel.metadata.Holder; +import com.alibaba.excel.metadata.FieldWrapper; import com.alibaba.excel.metadata.property.DateTimeFormatProperty; import com.alibaba.excel.metadata.property.ExcelContentProperty; import com.alibaba.excel.metadata.property.FontProperty; import com.alibaba.excel.metadata.property.NumberFormatProperty; import com.alibaba.excel.metadata.property.StyleProperty; -import com.alibaba.excel.write.metadata.holder.AbstractWriteHolder; +import com.alibaba.excel.write.metadata.fill.FillWrapper; import com.alibaba.excel.write.metadata.holder.WriteHolder; import lombok.AllArgsConstructor; @@ -312,16 +312,16 @@ public class ClassUtils { tempClass = tempClass.getSuperclass(); } // Screening of field - Map> orderFieldMap = new TreeMap>(); - Map indexFieldMap = new TreeMap(); - Map ignoreMap = new HashMap(16); + Map> orderFieldMap = new TreeMap<>(); + Map indexFieldMap = new TreeMap<>(); + Set ignoreSet = new HashSet<>(); ExcelIgnoreUnannotated excelIgnoreUnannotated = clazz.getAnnotation(ExcelIgnoreUnannotated.class); for (Field field : tempFieldList) { - declaredOneField(field, orderFieldMap, indexFieldMap, ignoreMap, excelIgnoreUnannotated); + declaredOneField(field, orderFieldMap, indexFieldMap, ignoreSet, excelIgnoreUnannotated); } - Map sortedFieldMap = buildSortedAllFieldMap(orderFieldMap, indexFieldMap); - FieldCache fieldCache = new FieldCache(sortedFieldMap, indexFieldMap, ignoreMap); + Map sortedFieldMap = buildSortedAllFieldMap(orderFieldMap, indexFieldMap); + FieldCache fieldCache = new FieldCache(sortedFieldMap, indexFieldMap); if (!(configurationHolder instanceof WriteHolder)) { return fieldCache; @@ -338,21 +338,21 @@ public class ClassUtils { return fieldCache; } // ignore filed - Map tempSortedFieldMapp = MapUtils.newHashMap(); + Map tempSortedFieldMapp = MapUtils.newHashMap(); int index = 0; - for (Map.Entry entry : sortedFieldMap.entrySet()) { + for (Map.Entry entry : sortedFieldMap.entrySet()) { Integer key = entry.getKey(); - Field field = entry.getValue(); + FieldWrapper field = entry.getValue(); // The current field needs to be ignored - if (writeHolder.ignore(entry.getValue().getName(), entry.getKey())) { - if (ignoreMap != null) { - ignoreMap.put(field.getName(), field); + if (writeHolder.ignore(field.getFieldName(), entry.getKey())) { + if (ignoreSet != null) { + ignoreSet.add(field.getFieldName()); } indexFieldMap.remove(index); } else { // Mandatory sorted fields - if (indexFieldMap.containsKey(key)) { + if (ignoreSet.contains(key)) { tempSortedFieldMapp.put(key, field); } else { // Need to reorder automatically @@ -374,13 +374,13 @@ public class ClassUtils { /** * it only works when {@link WriteHolder#getIncludeColumnFieldNames()} or * {@link WriteHolder#getIncludeColumnIndexes()} ()} has value - * and {@link WriteHolder#getSortByIncludeColumn()} ()} is true + * and {@link WriteHolder#getOrderByIncludeColumn()} ()} is true **/ private static void resortField(WriteHolder writeHolder, FieldCache fieldCache) { - if (!writeHolder.sortByIncludeColumn()) { + if (!writeHolder.orderByIncludeColumn()) { return; } - Map indexFieldMap = fieldCache.getIndexFieldMap(); + Map indexFieldMap = fieldCache.getIndexFieldMap(); Collection includeColumnFieldNames = writeHolder.includeColumnFieldNames(); if (!CollectionUtils.isEmpty(includeColumnFieldNames)) { @@ -392,9 +392,9 @@ public class ClassUtils { } // rebuild sortedFieldMap - Map tempSortedFieldMap = MapUtils.newHashMap(); + Map tempSortedFieldMap = MapUtils.newHashMap(); fieldCache.getSortedFieldMap().forEach((index, field) -> { - Integer tempFieldIndex = filedIndexMap.get(field.getName()); + Integer tempFieldIndex = filedIndexMap.get(field.getFieldName()); if (tempFieldIndex != null) { tempSortedFieldMap.put(tempFieldIndex, field); @@ -409,7 +409,7 @@ public class ClassUtils { } Collection includeColumnIndexes = writeHolder.includeColumnIndexes(); - if (!CollectionUtils.isEmpty(includeColumnFieldNames)) { + if (!CollectionUtils.isEmpty(includeColumnIndexes)) { // Index sorted map Map filedIndexMap = MapUtils.newHashMap(); int fieldIndex = 0; @@ -418,7 +418,7 @@ public class ClassUtils { } // rebuild sortedFieldMap - Map tempSortedFieldMap = MapUtils.newHashMap(); + Map tempSortedFieldMap = MapUtils.newHashMap(); fieldCache.getSortedFieldMap().forEach((index, field) -> { Integer tempFieldIndex = filedIndexMap.get(index); @@ -431,16 +431,16 @@ public class ClassUtils { } } - private static Map buildSortedAllFieldMap(Map> orderFieldMap, - Map indexFieldMap) { + private static Map buildSortedAllFieldMap(Map> orderFieldMap, + Map indexFieldMap) { - Map sortedAllFieldMap = new HashMap( - (orderFieldMap.size() + indexFieldMap.size()) * 4 / 3 + 1); + Map sortedAllFieldMap = MapUtils.newHashMapWithExpectedSize( + orderFieldMap.size() + indexFieldMap.size()); - Map tempIndexFieldMap = new HashMap(indexFieldMap); + Map tempIndexFieldMap = MapUtils.newLinkedHashMapWithExpectedSize(indexFieldMap.size()); int index = 0; - for (List fieldList : orderFieldMap.values()) { - for (Field field : fieldList) { + for (List fieldList : orderFieldMap.values()) { + for (FieldWrapper field : fieldList) { while (tempIndexFieldMap.containsKey(index)) { sortedAllFieldMap.put(index, tempIndexFieldMap.get(index)); tempIndexFieldMap.remove(index); @@ -454,34 +454,45 @@ public class ClassUtils { return sortedAllFieldMap; } - private static void declaredOneField(Field field, Map> orderFieldMap, - Map indexFieldMap, Map ignoreMap, + private static void declaredOneField(Field field, Map> orderFieldMap, + Map indexFieldMap, Set ignoreSet, ExcelIgnoreUnannotated excelIgnoreUnannotated) { + String fieldName = FieldUtils.resolveCglibFieldName(field); + FieldWrapper fieldWrapper = new FieldWrapper(); + fieldWrapper.setField(field); + fieldWrapper.setFieldName(fieldName); ExcelIgnore excelIgnore = field.getAnnotation(ExcelIgnore.class); + if (excelIgnore != null) { - ignoreMap.put(field.getName(), field); + ignoreSet.add(fieldName); return; } ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class); boolean noExcelProperty = excelProperty == null && excelIgnoreUnannotated != null; if (noExcelProperty) { - ignoreMap.put(field.getName(), field); + ignoreSet.add(fieldName); return; } boolean isStaticFinalOrTransient = (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers())) || Modifier.isTransient(field.getModifiers()); if (excelProperty == null && isStaticFinalOrTransient) { - ignoreMap.put(field.getName(), field); + ignoreSet.add(fieldName); return; } + // set heads + if (excelProperty != null) { + fieldWrapper.setHeads(excelProperty.value()); + } + if (excelProperty != null && excelProperty.index() >= 0) { if (indexFieldMap.containsKey(excelProperty.index())) { - throw new ExcelCommonException("The index of '" + indexFieldMap.get(excelProperty.index()).getName() - + "' and '" + field.getName() + "' must be inconsistent"); + throw new ExcelCommonException( + "The index of '" + indexFieldMap.get(excelProperty.index()).getFieldName() + + "' and '" + field.getName() + "' must be inconsistent"); } - indexFieldMap.put(excelProperty.index(), field); + indexFieldMap.put(excelProperty.index(), fieldWrapper); return; } @@ -489,8 +500,8 @@ public class ClassUtils { if (excelProperty != null) { order = excelProperty.order(); } - List orderFieldList = orderFieldMap.computeIfAbsent(order, key -> ListUtils.newArrayList()); - orderFieldList.add(field); + List orderFieldList = orderFieldMap.computeIfAbsent(order, key -> ListUtils.newArrayList()); + orderFieldList.add(fieldWrapper); } /** diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java index f7f9416c..7878f49e 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java @@ -122,12 +122,12 @@ public abstract class AbstractExcelWriterParameterBuilder entry : fieldCache.getSortedFieldMap().entrySet()) { - Field field = entry.getValue(); - String fieldName = FieldUtils.resolveCglibFieldName(field); + for (Map.Entry entry : fieldCache.getSortedFieldMap().entrySet()) { + FieldWrapper field = entry.getValue(); + String fieldName = field.getFieldName(); boolean uselessData = !beanKeySet.contains(fieldName) || beanMapHandledSet.contains(fieldName); if (uselessData) { continue; @@ -213,18 +214,4 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { } } - private void initSortedAllFieldMapFieldList(Class clazz, Map sortedAllFieldMap) { - if (!sortedAllFieldMap.isEmpty()) { - return; - } - - WriteSheetHolder writeSheetHolder = writeContext.writeSheetHolder(); - boolean needIgnore = - !CollectionUtils.isEmpty(writeSheetHolder.getExcludeColumnFieldNames()) || !CollectionUtils - .isEmpty(writeSheetHolder.getExcludeColumnIndexes()) || !CollectionUtils - .isEmpty(writeSheetHolder.getIncludeColumnFieldNames()) || !CollectionUtils - .isEmpty(writeSheetHolder.getIncludeColumnIndexes()); - ClassUtils.declaredFields(clazz, writeSheetHolder); - } - } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java index 68cc09c9..a926209a 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java @@ -58,9 +58,9 @@ public class WriteBasicParameter extends BasicParameter { private Collection includeColumnFieldNames; /** - * Data will be sorted according to {@link #includeColumnFieldNames} or {@link #includeColumnIndexes}. + * Data will be order by {@link #includeColumnFieldNames} or {@link #includeColumnIndexes}. * * default is false. */ - private Boolean sortByIncludeColumn; + private Boolean orderByIncludeColumn; } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java index 11566e77..d03ea3d8 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java @@ -14,7 +14,6 @@ import com.alibaba.excel.converters.Converter; import com.alibaba.excel.converters.ConverterKeyBuild; import com.alibaba.excel.converters.DefaultConverterLoader; import com.alibaba.excel.enums.HeadKindEnum; -import com.alibaba.excel.enums.HolderEnum; import com.alibaba.excel.event.NotRepeatExecutor; import com.alibaba.excel.metadata.AbstractHolder; import com.alibaba.excel.metadata.Head; @@ -97,11 +96,11 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ private Collection includeColumnFieldNames; /** - * Data will be sorted according to {@link #includeColumnFieldNames} or {@link #includeColumnIndexes}. + * Data will be order by {@link #includeColumnFieldNames} or {@link #includeColumnIndexes}. * * default is false. */ - private Boolean sortByIncludeColumn; + private Boolean orderByIncludeColumn; /** * Write handler @@ -203,14 +202,14 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ this.includeColumnFieldNames = writeBasicParameter.getIncludeColumnFieldNames(); } - if (writeBasicParameter.getSortByIncludeColumn() == null) { + if (writeBasicParameter.getOrderByIncludeColumn() == null) { if (parentAbstractWriteHolder == null) { - this.sortByIncludeColumn = Boolean.FALSE; + this.orderByIncludeColumn = Boolean.FALSE; } else { - this.sortByIncludeColumn = parentAbstractWriteHolder.getSortByIncludeColumn(); + this.orderByIncludeColumn = parentAbstractWriteHolder.getOrderByIncludeColumn(); } } else { - this.sortByIncludeColumn = writeBasicParameter.getSortByIncludeColumn(); + this.orderByIncludeColumn = writeBasicParameter.getOrderByIncludeColumn(); } if (writeBasicParameter.getIncludeColumnIndexes() == null && parentAbstractWriteHolder != null) { @@ -500,8 +499,8 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ } @Override - public boolean sortByIncludeColumn() { - return getSortByIncludeColumn(); + public boolean orderByIncludeColumn() { + return getOrderByIncludeColumn(); } @Override diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java index 3f60a4d9..24ba0c6f 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java @@ -49,11 +49,11 @@ public interface WriteHolder extends ConfigurationHolder { int relativeHeadRowIndex(); /** - * Data will be sorted according to {@link #includeColumnFieldNames} or {@link #includeColumnIndexes}. + * Data will be order by {@link #includeColumnFieldNames} or {@link #includeColumnIndexes}. * * default is false. */ - boolean sortByIncludeColumn(); + boolean orderByIncludeColumn(); /** * Only output the custom columns. diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheData.java new file mode 100644 index 00000000..f6455438 --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheData.java @@ -0,0 +1,21 @@ +package com.alibaba.easyexcel.test.core.cache; + +import com.alibaba.excel.annotation.ExcelProperty; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +/** + * @author Jiaju Zhuang + */ +@Getter +@Setter +@EqualsAndHashCode +public class CacheData { + @ExcelProperty("姓名") + private String name; + + @ExcelProperty("年龄") + private Long age; +} diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheDataTest.java new file mode 100644 index 00000000..10cb15d0 --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheDataTest.java @@ -0,0 +1,219 @@ +package com.alibaba.easyexcel.test.core.cache; + +import java.io.File; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.alibaba.easyexcel.test.demo.read.DemoData; +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.enums.CacheLocationEnum; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.excel.metadata.FieldCache; +import com.alibaba.excel.read.listener.PageReadListener; +import com.alibaba.excel.util.ClassUtils; +import com.alibaba.excel.util.FieldUtils; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +/** + * @author Jiaju Zhuang + */ +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@Slf4j +public class CacheDataTest { + + private static File file07; + private static File fileCacheInvoke; + private static File fileCacheInvoke2; + private static File fileCacheInvokeMemory; + private static File fileCacheInvokeMemory2; + + @BeforeClass + public static void init() { + file07 = TestFileUtil.createNewFile("cache/cache.xlsx"); + fileCacheInvoke = TestFileUtil.createNewFile("cache/fileCacheInvoke.xlsx"); + fileCacheInvoke2 = TestFileUtil.createNewFile("cache/fileCacheInvoke2.xlsx"); + fileCacheInvokeMemory = TestFileUtil.createNewFile("cache/fileCacheInvokeMemory.xlsx"); + fileCacheInvokeMemory2 = TestFileUtil.createNewFile("cache/fileCacheInvokeMemory2.xlsx"); + } + + @Test + public void t01ReadAndWrite() throws Exception { + Field field = FieldUtils.getField(ClassUtils.class, "FIELD_THREAD_LOCAL", true); + ThreadLocal, FieldCache>> fieldThreadLocal = (ThreadLocal, FieldCache>>)field.get( + ClassUtils.class.newInstance()); + Assert.assertNull(fieldThreadLocal.get()); + EasyExcel.write(file07, CacheData.class).sheet().doWrite(data()); + EasyExcel.read(file07, CacheData.class, new PageReadListener(dataList -> { + Assert.assertNotNull(fieldThreadLocal.get()); + })) + .sheet() + .doRead(); + Assert.assertNull(fieldThreadLocal.get()); + } + + @Test + public void t02ReadAndWriteInvoke() throws Exception { + EasyExcel.write(fileCacheInvoke, CacheInvokeData.class).sheet().doWrite(dataInvoke()); + EasyExcel.read(fileCacheInvoke, CacheInvokeData.class, new AnalysisEventListener() { + + @Override + public void invokeHeadMap(Map headMap, AnalysisContext context) { + Assert.assertEquals(2, headMap.size()); + Assert.assertEquals("姓名", headMap.get(0)); + Assert.assertEquals("年龄", headMap.get(1)); + } + + @Override + public void invoke(CacheInvokeData data, AnalysisContext context) { + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + + } + }).sheet() + .doRead(); + + Field name = FieldUtils.getField(CacheInvokeData.class, "name", true); + ExcelProperty annotation = name.getAnnotation(ExcelProperty.class); + InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation); + Field memberValues = invocationHandler.getClass().getDeclaredField("memberValues"); + memberValues.setAccessible(true); + Map map = (Map)memberValues.get(invocationHandler); + map.put("value", new String[] {"姓名2"}); + + EasyExcel.write(fileCacheInvoke2, CacheInvokeData.class).sheet().doWrite(dataInvoke()); + EasyExcel.read(fileCacheInvoke2, CacheInvokeData.class, new AnalysisEventListener() { + + @Override + public void invokeHeadMap(Map headMap, AnalysisContext context) { + Assert.assertEquals(2, headMap.size()); + Assert.assertEquals("姓名2", headMap.get(0)); + Assert.assertEquals("年龄", headMap.get(1)); + } + + @Override + public void invoke(CacheInvokeData data, AnalysisContext context) { + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + + } + }).sheet() + .doRead(); + + } + + @Test + public void t03ReadAndWriteInvokeMemory() throws Exception { + EasyExcel.write(fileCacheInvokeMemory, CacheInvokeMemoryData.class) + .filedCacheLocation(CacheLocationEnum.MEMORY) + .sheet() + .doWrite(dataInvokeMemory()); + EasyExcel.read(fileCacheInvokeMemory, CacheInvokeMemoryData.class, + new AnalysisEventListener() { + + @Override + public void invokeHeadMap(Map headMap, AnalysisContext context) { + Assert.assertEquals(2, headMap.size()); + Assert.assertEquals("姓名", headMap.get(0)); + Assert.assertEquals("年龄", headMap.get(1)); + } + + @Override + public void invoke(CacheInvokeMemoryData data, AnalysisContext context) { + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + + } + }) + .filedCacheLocation(CacheLocationEnum.MEMORY) + .sheet() + .doRead(); + + Field name = FieldUtils.getField(CacheInvokeMemoryData.class, "name", true); + ExcelProperty annotation = name.getAnnotation(ExcelProperty.class); + InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation); + Field memberValues = invocationHandler.getClass().getDeclaredField("memberValues"); + memberValues.setAccessible(true); + Map map = (Map)memberValues.get(invocationHandler); + map.put("value", new String[] {"姓名2"}); + + EasyExcel.write(fileCacheInvokeMemory2, CacheInvokeMemoryData.class) + .filedCacheLocation(CacheLocationEnum.MEMORY) + .sheet() + .doWrite(dataInvokeMemory()); + EasyExcel.read(fileCacheInvokeMemory2, CacheInvokeMemoryData.class, + new AnalysisEventListener() { + + @Override + public void invokeHeadMap(Map headMap, AnalysisContext context) { + Assert.assertEquals(2, headMap.size()); + Assert.assertEquals("姓名", headMap.get(0)); + Assert.assertEquals("年龄", headMap.get(1)); + } + + @Override + public void invoke(CacheInvokeMemoryData data, AnalysisContext context) { + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + + } + }) + .filedCacheLocation(CacheLocationEnum.MEMORY) + .sheet() + .doRead(); + + } + + private List data() { + List list = new ArrayList(); + for (int i = 0; i < 10; i++) { + CacheData simpleData = new CacheData(); + simpleData.setName("姓名" + i); + simpleData.setAge((long)i); + list.add(simpleData); + } + return list; + } + + private List dataInvoke() { + List list = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + CacheInvokeData simpleData = new CacheInvokeData(); + simpleData.setName("姓名" + i); + simpleData.setAge((long)i); + list.add(simpleData); + } + return list; + } + + private List dataInvokeMemory() { + List list = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + CacheInvokeMemoryData simpleData = new CacheInvokeMemoryData(); + simpleData.setName("姓名" + i); + simpleData.setAge((long)i); + list.add(simpleData); + } + return list; + } +} diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheInvokeData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheInvokeData.java new file mode 100644 index 00000000..6506c8af --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheInvokeData.java @@ -0,0 +1,21 @@ +package com.alibaba.easyexcel.test.core.cache; + +import com.alibaba.excel.annotation.ExcelProperty; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +/** + * @author Jiaju Zhuang + */ +@Getter +@Setter +@EqualsAndHashCode +public class CacheInvokeData { + @ExcelProperty("姓名") + private String name; + + @ExcelProperty("年龄") + private Long age; +} diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheInvokeMemoryData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheInvokeMemoryData.java new file mode 100644 index 00000000..25fa25de --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheInvokeMemoryData.java @@ -0,0 +1,21 @@ +package com.alibaba.easyexcel.test.core.cache; + +import com.alibaba.excel.annotation.ExcelProperty; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +/** + * @author Jiaju Zhuang + */ +@Getter +@Setter +@EqualsAndHashCode +public class CacheInvokeMemoryData { + @ExcelProperty("姓名") + private String name; + + @ExcelProperty("年龄") + private Long age; +} diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java index 578b5a63..86e32072 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java @@ -34,9 +34,13 @@ public class ExcludeOrIncludeDataTest { private static File includeFieldName07; private static File includeFieldName03; private static File includeFieldNameCsv; - private static File includeFieldNameSort07; - private static File includeFieldNameSort03; - private static File includeFieldNameSortCsv; + private static File includeFieldNameOrder07; + private static File includeFieldNameOrder03; + private static File includeFieldNameOrderCsv; + + private static File includeFieldNameOrderIndex07; + private static File includeFieldNameOrderIndex03; + private static File includeFieldNameOrderIndexCsv; @BeforeClass public static void init() { @@ -52,9 +56,12 @@ public class ExcludeOrIncludeDataTest { includeFieldName07 = TestFileUtil.createNewFile("includeFieldName.xlsx"); includeFieldName03 = TestFileUtil.createNewFile("includeFieldName.xls"); includeFieldNameCsv = TestFileUtil.createNewFile("includeFieldName.csv"); - includeFieldNameSort07 = TestFileUtil.createNewFile("includeFieldNameSort.xlsx"); - includeFieldNameSort03 = TestFileUtil.createNewFile("includeFieldNameSort.xls"); - includeFieldNameSortCsv = TestFileUtil.createNewFile("includeFieldNameSort.csv"); + includeFieldNameOrder07 = TestFileUtil.createNewFile("includeFieldNameOrder.xlsx"); + includeFieldNameOrder03 = TestFileUtil.createNewFile("includeFieldNameOrder.xls"); + includeFieldNameOrderCsv = TestFileUtil.createNewFile("includeFieldNameOrder.csv"); + includeFieldNameOrderIndex07 = TestFileUtil.createNewFile("includeFieldNameOrderIndex.xlsx"); + includeFieldNameOrderIndex03 = TestFileUtil.createNewFile("includeFieldNameOrderIndex.xls"); + includeFieldNameOrderIndexCsv = TestFileUtil.createNewFile("includeFieldNameOrderIndex.csv"); } @Test @@ -119,18 +126,33 @@ public class ExcludeOrIncludeDataTest { } @Test - public void t41IncludeFieldName07() { - includeFieldNameForce(includeFieldNameForceIndex07); + public void t41IncludeFieldNameOrder07() { + includeFieldNameOrder(includeFieldNameOrder07); + } + + @Test + public void t42IncludeFieldNameOrder03() { + includeFieldNameOrder(includeFieldNameOrder03); + } + + @Test + public void t43IncludeFieldNameOrderCsv() { + includeFieldNameOrder(includeFieldNameOrderCsv); + } + + @Test + public void t41IncludeFieldNameOrderIndex07() { + includeFieldNameOrderIndex(includeFieldNameOrderIndex07); } @Test - public void t42IncludeFieldName03() { - includeFieldNameForce(includeFieldNameForceIndex03); + public void t42IncludeFieldNameOrderIndex03() { + includeFieldNameOrderIndex(includeFieldNameOrderIndex03); } @Test - public void t43IncludeFieldNameCsv() { - includeFieldNameForce(includeFieldNameForceIndexCsv); + public void t43IncludeFieldNameOrderIndexCsv() { + includeFieldNameOrderIndex(includeFieldNameOrderIndexCsv); } private void excludeIndex(File file) { @@ -192,18 +214,44 @@ public class ExcludeOrIncludeDataTest { Assert.assertEquals("column3", record.get(1)); } - private void includeFieldNameForce(File file) { + + private void includeFieldNameOrderIndex(File file) { + List includeColumnIndexes = new ArrayList<>(); + includeColumnIndexes.add(3); + includeColumnIndexes.add(1); + includeColumnIndexes.add(2); + includeColumnIndexes.add(0); + EasyExcel.write(file, ExcludeOrIncludeData.class) + .includeColumnIndexes(includeColumnIndexes) + .orderByIncludeColumn(true). + sheet() + .doWrite(data()); + List> dataMap = EasyExcel.read(file).sheet().doReadSync(); + Assert.assertEquals(1, dataMap.size()); + Map record = dataMap.get(0); + Assert.assertEquals(4, record.size()); + Assert.assertEquals("column4", record.get(0)); + Assert.assertEquals("column2", record.get(1)); + Assert.assertEquals("column3", record.get(2)); + Assert.assertEquals("column1", record.get(3)); + } + private void includeFieldNameOrder(File file) { List includeColumnFieldNames = new ArrayList<>(); - includeColumnFieldNames.add("column3"); + includeColumnFieldNames.add("column4"); includeColumnFieldNames.add("column2"); - EasyExcel.write(file, ExcludeOrIncludeData.class).includeColumnFieldNames(includeColumnFieldNames) - .sortByIncludeColumn(true).sheet().doWrite(data()); + includeColumnFieldNames.add("column3"); + EasyExcel.write(file, ExcludeOrIncludeData.class) + .includeColumnFieldNames(includeColumnFieldNames) + .orderByIncludeColumn(true). + sheet() + .doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); Assert.assertEquals(1, dataMap.size()); Map record = dataMap.get(0); - Assert.assertEquals(2, record.size()); - Assert.assertEquals("column3", record.get(0)); + Assert.assertEquals(3, record.size()); + Assert.assertEquals("column4", record.get(0)); Assert.assertEquals("column2", record.get(1)); + Assert.assertEquals("column3", record.get(2)); } private List data() { diff --git a/update.md b/update.md index 1c820ec8..66c04037 100644 --- a/update.md +++ b/update.md @@ -7,8 +7,9 @@ * 在`easyexcel-parent` 包中移除测试包的`dependencyManagement` * 删除`org.apache.poi.hssf.usermodel.PoiUtils.java`, 使用反射获取 [Issue #2804](https://github.com/alibaba/easyexcel/issues/2804) -* 默认对象反射缓存改成`ThreadLocal`,并支持设置 [Issue #2792](https://github.com/alibaba/easyexcel/issues/2792) -* 支持根据`includeColumnIndexes`和`includeColumnFieldNames`排序 [Issue #2697](https://github.com/alibaba/easyexcel/issues/2697) +* 默认对象反射缓存改成`ThreadLocal`,并支持设置反射缓存类型 [Issue #2792](https://github.com/alibaba/easyexcel/issues/2792) +* 支持根据`includeColumnIndexes`和`includeColumnFieldNames` + 排序 [Issue #2697](https://github.com/alibaba/easyexcel/issues/2697) # 3.2.1 From 0a4241fb1fbdf07709c960029a658ee85df9566d Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Thu, 4 May 2023 17:20:41 +0800 Subject: [PATCH 35/53] =?UTF-8?q?*=20=E9=BB=98=E8=AE=A4=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E5=8F=8D=E5=B0=84=E7=BC=93=E5=AD=98=E6=94=B9=E6=88=90`ThreadLo?= =?UTF-8?q?cal`,=E5=B9=B6=E6=94=AF=E6=8C=81=E8=AE=BE=E7=BD=AE=E5=8F=8D?= =?UTF-8?q?=E5=B0=84=E7=BC=93=E5=AD=98=E7=B1=BB=E5=9E=8B=20[Issue=20#2792]?= =?UTF-8?q?(https://github.com/alibaba/easyexcel/issues/2792)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index efee515e..e516492c 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析 com.alibaba easyexcel - 3.2.1 + 3.3.0 ``` From 67d00c195171c8e42fd44f4807454c61c2368c19 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Thu, 4 May 2023 20:30:44 +0800 Subject: [PATCH 36/53] =?UTF-8?q?*=20=E6=A0=B9=E6=8D=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=B5=81=E8=A7=A3=E6=9E=90=EF=BC=8C=E7=94=B1=E6=8A=9B=E5=87=BA?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=94=B9=E4=B8=BA=EF=BC=8C=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E4=B8=BAcsv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/alibaba/excel/support/ExcelTypeEnum.java | 8 ++++---- .../src/main/java/com/alibaba/excel/util/ClassUtils.java | 9 ++++----- easyexcel-support/pom.xml | 1 + easyexcel-test/pom.xml | 5 +++++ update.md | 4 +++- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java index 09ab04ec..e78bf94c 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java @@ -23,10 +23,12 @@ public enum ExcelTypeEnum { * csv */ CSV(".csv", new byte[] {-27, -89, -109, -27}), + /** * xls */ XLS(".xls", new byte[] {-48, -49, 17, -32, -95, -79, 26, -31}), + /** * xlsx */ @@ -96,13 +98,11 @@ public enum ExcelTypeEnum { byte[] data = IOUtils.peekFirstNBytes(inputStream, MAX_PATTERN_LENGTH); if (findMagic(XLSX.magic, data)) { return XLSX; - } else if (findMagic(CSV.magic, data)) { - return CSV; } else if (findMagic(XLS.magic, data)) { return XLS; } - throw new ExcelCommonException( - "Convert excel format exception.You can try specifying the 'excelType' yourself"); + // csv has no fixed prefix, if the format is not specified, it defaults to csv + return CSV; } private static boolean findMagic(byte[] expected, byte[] actual) { diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index c5062176..df9d3683 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -431,13 +431,12 @@ public class ClassUtils { } } - private static Map buildSortedAllFieldMap(Map> orderFieldMap, - Map indexFieldMap) { + private static Map buildSortedAllFieldMap(Map> orderFieldMap, Map indexFieldMap) { - Map sortedAllFieldMap = MapUtils.newHashMapWithExpectedSize( - orderFieldMap.size() + indexFieldMap.size()); + Map sortedAllFieldMap = new HashMap<>( + (orderFieldMap.size() + indexFieldMap.size()) * 4 / 3 + 1); - Map tempIndexFieldMap = MapUtils.newLinkedHashMapWithExpectedSize(indexFieldMap.size()); + Map tempIndexFieldMap = new HashMap<>(indexFieldMap); int index = 0; for (List fieldList : orderFieldMap.values()) { for (FieldWrapper field : fieldList) { diff --git a/easyexcel-support/pom.xml b/easyexcel-support/pom.xml index 23613040..20e7c937 100644 --- a/easyexcel-support/pom.xml +++ b/easyexcel-support/pom.xml @@ -21,6 +21,7 @@ org.springframework spring-core + 5.3.27 org.springframework diff --git a/easyexcel-test/pom.xml b/easyexcel-test/pom.xml index 1a39d325..926ad2c4 100644 --- a/easyexcel-test/pom.xml +++ b/easyexcel-test/pom.xml @@ -40,6 +40,11 @@ spring-boot-starter-test 2.7.11 + + junit + junit + 4.13.2 + diff --git a/update.md b/update.md index 66c04037..52d78383 100644 --- a/update.md +++ b/update.md @@ -7,9 +7,11 @@ * 在`easyexcel-parent` 包中移除测试包的`dependencyManagement` * 删除`org.apache.poi.hssf.usermodel.PoiUtils.java`, 使用反射获取 [Issue #2804](https://github.com/alibaba/easyexcel/issues/2804) -* 默认对象反射缓存改成`ThreadLocal`,并支持设置反射缓存类型 [Issue #2792](https://github.com/alibaba/easyexcel/issues/2792) +* 默认对象反射缓存改成`ThreadLocal` + ,并支持设置反射缓存类型 [Issue #2792](https://github.com/alibaba/easyexcel/issues/2792) * 支持根据`includeColumnIndexes`和`includeColumnFieldNames` 排序 [Issue #2697](https://github.com/alibaba/easyexcel/issues/2697) +* 根据文件流解析,由抛出异常改为,默认识别为csv # 3.2.1 From d1216576a0af9f0b8bd5088a013ef6afdfb57960 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Thu, 4 May 2023 20:38:23 +0800 Subject: [PATCH 37/53] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../alibaba/excel/enums/ByteOrderMarkEnum.java | 15 +++++++++++++++ .../excel/write/metadata/holder/WriteHolder.java | 16 ++++++++++++++-- pom.xml | 1 + 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/enums/ByteOrderMarkEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/ByteOrderMarkEnum.java index f6b1e8b0..7c069099 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/enums/ByteOrderMarkEnum.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/enums/ByteOrderMarkEnum.java @@ -16,10 +16,25 @@ import org.apache.commons.io.ByteOrderMark; @Getter public enum ByteOrderMarkEnum { + /** + * UTF_8 + */ UTF_8(ByteOrderMark.UTF_8), + /** + * UTF_16BE + */ UTF_16BE(ByteOrderMark.UTF_16BE), + /** + * UTF_16LE + */ UTF_16LE(ByteOrderMark.UTF_16LE), + /** + * UTF_32BE + */ UTF_32BE(ByteOrderMark.UTF_32BE), + /** + * UTF_32LE + */ UTF_32LE(ByteOrderMark.UTF_32LE), ; diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java index 24ba0c6f..ca0fb3e9 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java @@ -52,25 +52,37 @@ public interface WriteHolder extends ConfigurationHolder { * Data will be order by {@link #includeColumnFieldNames} or {@link #includeColumnIndexes}. * * default is false. + * + * @return */ + boolean orderByIncludeColumn(); /** * Only output the custom columns. + * + * @return */ Collection includeColumnIndexes(); /** * Only output the custom columns. + * + * @return */ Collection includeColumnFieldNames(); /** * Ignore the custom columns. + * + * @return */ - Collection excludeColumnIndexes(); + Collection excludeColumnIndexes(); + /** * Ignore the custom columns. + * + * @return */ - Collection excludeColumnFieldNames(); + Collection excludeColumnFieldNames(); } diff --git a/pom.xml b/pom.xml index 7288396a..e3cbf50f 100644 --- a/pom.xml +++ b/pom.xml @@ -242,6 +242,7 @@ com/alibaba/excel/metadata/format/ExcelGeneralNumberFormat.java com/alibaba/excel/metadata/csv/CsvDataFormat.java com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java + com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java From 76394c70224ca7ee009a164988269d7dc1f1e687 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Thu, 4 May 2023 20:44:04 +0800 Subject: [PATCH 38/53] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=A1=88=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- easyexcel-test/pom.xml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/easyexcel-test/pom.xml b/easyexcel-test/pom.xml index 926ad2c4..23da290a 100644 --- a/easyexcel-test/pom.xml +++ b/easyexcel-test/pom.xml @@ -70,11 +70,9 @@ org.apache.maven.plugins maven-surefire-plugin - - /com/alibaba/easyexcel/test/demo/**/*.java - /com/alibaba/easyexcel/test/temp/**/*.java - /com/alibaba/easyexcel/test/util/**/*.java - + + /com/alibaba/easyexcel/test/core/**/*.java + true From 07167642d40a01798709cf9f384c6d9f28573353 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Thu, 4 May 2023 21:00:09 +0800 Subject: [PATCH 39/53] =?UTF-8?q?=E5=8D=87=E7=BA=A7junit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- easyexcel-test/pom.xml | 5 - .../annotation/AnnotationDataListener.java | 14 +- .../core/annotation/AnnotationDataTest.java | 44 +-- .../AnnotationIndexAndNameDataListener.java | 18 +- .../AnnotationIndexAndNameDataTest.java | 12 +- .../easyexcel/test/core/bom/BomDataTest.java | 43 ++- .../test/core/cache/CacheDataTest.java | 44 +-- .../core/celldata/CellDataDataListener.java | 14 +- .../test/core/celldata/CellDataDataTest.java | 14 +- .../test/core/charset/CharsetDataTest.java | 24 +- .../core/compatibility/CompatibilityTest.java | 53 ++- .../core/converter/ConverterDataListener.java | 36 +- .../core/converter/ConverterDataTest.java | 15 +- .../test/core/converter/ConverterTest.java | 12 +- .../ReadAllConverterDataListener.java | 82 ++--- .../test/core/dataformat/DateFormatTest.java | 22 +- .../core/encrypt/EncryptDataListener.java | 16 +- .../test/core/encrypt/EncryptDataTest.java | 12 +- .../core/exception/ExceptionDataListener.java | 16 +- .../core/exception/ExceptionDataTest.java | 18 +- .../ExcludeOrIncludeDataTest.java | 69 ++-- .../test/core/extra/ExtraDataListener.java | 36 +- .../test/core/extra/ExtraDataTest.java | 24 +- .../test/core/fill/FillDataTest.java | 32 +- .../annotation/FillAnnotationDataTest.java | 36 +- .../fill/style/FillStyleAnnotatedTest.java | 262 ++++++++------- .../core/fill/style/FillStyleDataTest.java | 260 ++++++++------- .../test/core/handler/WriteHandler.java | 314 +++++++++--------- .../test/core/handler/WriteHandlerTest.java | 16 +- .../test/core/head/ComplexDataListener.java | 12 +- .../test/core/head/ComplexHeadDataTest.java | 12 +- .../test/core/head/ListHeadDataListener.java | 18 +- .../test/core/head/ListHeadDataTest.java | 14 +- .../test/core/head/NoHeadDataListener.java | 12 +- .../test/core/head/NoHeadDataTest.java | 12 +- .../test/core/large/LargeDataListener.java | 6 +- .../test/core/large/LargeDataTest.java | 22 +- .../MultipleSheetsDataTest.java | 16 +- .../MultipleSheetsListener.java | 10 +- .../test/core/nomodel/NoModelDataTest.java | 54 +-- .../core/noncamel/UnCamelDataListener.java | 28 +- .../test/core/noncamel/UnCamelDataTest.java | 13 +- .../core/parameter/ParameterDataListener.java | 16 +- .../core/parameter/ParameterDataTest.java | 12 +- .../repetition/RepetitionDataListener.java | 14 +- .../core/repetition/RepetitionDataTest.java | 12 +- .../test/core/simple/SimpleDataListener.java | 18 +- .../simple/SimpleDataSheetNameListener.java | 12 +- .../test/core/simple/SimpleDataTest.java | 25 +- .../test/core/skip/SkipDataTest.java | 26 +- .../test/core/sort/SortDataListener.java | 23 +- .../test/core/sort/SortDataTest.java | 42 +-- .../test/core/style/StyleDataListener.java | 14 +- .../test/core/style/StyleDataTest.java | 44 +-- .../core/template/TemplateDataListener.java | 14 +- .../test/core/template/TemplateDataTest.java | 14 +- .../easyexcel/test/demo/fill/FillTest.java | 5 +- .../easyexcel/test/demo/rare/WriteTest.java | 7 +- .../test/demo/read/DemoExtraListener.java | 7 +- .../easyexcel/test/demo/read/ReadTest.java | 5 +- .../demo/write/ImageDataWithAnnotation.java | 1 - .../easyexcel/test/demo/write/WriteTest.java | 5 +- .../easyexcel/test/temp/DemoData3.java | 2 - .../easyexcel/test/temp/FillTempTest.java | 12 +- .../easyexcel/test/temp/Lock2Test.java | 19 +- .../easyexcel/test/temp/LockDataListener.java | 6 +- .../alibaba/easyexcel/test/temp/LockTest.java | 8 +- .../easyexcel/test/temp/StyleData.java | 1 - .../easyexcel/test/temp/StyleTest.java | 11 +- .../easyexcel/test/temp/WriteLargeTest.java | 5 +- .../easyexcel/test/temp/WriteV33Test.java | 5 +- .../easyexcel/test/temp/WriteV34Test.java | 23 +- .../easyexcel/test/temp/Xls03Test.java | 5 +- .../easyexcel/test/temp/bug/ExcelCreat.java | 9 +- .../easyexcel/test/temp/bug/HeadType.java | 2 - .../easyexcel/test/temp/cache/CacheTest.java | 13 +- .../easyexcel/test/temp/csv/CsvReadTest.java | 4 +- .../easyexcel/test/temp/data/HeadType.java | 2 - .../test/temp/dataformat/DataFormatTest.java | 5 +- .../test/temp/dataformat/DataFormatter1.java | 162 +++++---- .../test/temp/fill/FillTempTest.java | 9 +- .../test/temp/issue1662/Issue1662Test.java | 5 +- .../test/temp/issue1663/FillTest.java | 10 +- .../test/temp/issue2443/Issue2443Test.java | 26 +- .../test/temp/large/LargeDataListener.java | 6 +- .../temp/large/NoModelLargeDataListener.java | 6 +- .../test/temp/large/TempLargeDataTest.java | 19 +- .../easyexcel/test/temp/poi/Poi2Test.java | 5 +- .../easyexcel/test/temp/poi/Poi3Test.java | 9 +- .../test/temp/poi/PoiEncryptTest.java | 10 +- .../test/temp/poi/PoiFormatTest.java | 5 +- .../easyexcel/test/temp/poi/PoiTest.java | 9 +- .../easyexcel/test/temp/poi/PoiWriteTest.java | 10 +- .../easyexcel/test/temp/read/CommentTest.java | 11 +- .../easyexcel/test/temp/read/HDListener.java | 6 +- .../test/temp/read/HeadListener.java | 6 +- .../test/temp/read/HeadReadData.java | 2 +- .../test/temp/read/HeadReadTest.java | 6 +- .../easyexcel/test/temp/simple/HgTest.java | 23 +- .../test/temp/simple/RepeatListener.java | 6 +- .../test/temp/simple/RepeatTest.java | 11 +- .../easyexcel/test/temp/simple/Write.java | 10 +- .../easyexcel/test/temp/simple/WriteData.java | 4 +- .../test/temp/write/TempWriteTest.java | 26 +- .../easyexcel/test/util/TestFileUtil.java | 7 +- .../alibaba/easyexcel/test/util/TestUtil.java | 3 - 106 files changed, 1275 insertions(+), 1377 deletions(-) diff --git a/easyexcel-test/pom.xml b/easyexcel-test/pom.xml index 23da290a..840d3f61 100644 --- a/easyexcel-test/pom.xml +++ b/easyexcel-test/pom.xml @@ -40,11 +40,6 @@ spring-boot-starter-test 2.7.11 - - junit - junit - 4.13.2 - diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataListener.java index 222d83b5..a7249bfb 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataListener.java @@ -4,16 +4,16 @@ import java.text.ParseException; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.exception.ExcelCommonException; import com.alibaba.excel.util.DateUtils; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -28,14 +28,14 @@ public class AnnotationDataListener extends AnalysisEventListener dataStyle() throws Exception { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataListener.java index ea091f23..eaa73f99 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataListener.java @@ -3,14 +3,14 @@ package com.alibaba.easyexcel.test.core.annotation; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -25,12 +25,12 @@ public class AnnotationIndexAndNameDataListener extends AnalysisEventListener> headMap, AnalysisContext context) { String head = headMap.get(0).getStringValue(); - Assert.assertEquals("姓名", head); + Assertions.assertEquals("姓名", head); } @Override @@ -82,10 +77,10 @@ public class BomDataTest { @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(dataList.size(), 10); + Assertions.assertEquals(dataList.size(), 10); BomData bomData = dataList.get(0); - Assert.assertEquals("姓名0", bomData.getName()); - Assert.assertEquals(20, (long)bomData.getAge()); + Assertions.assertEquals("姓名0", bomData.getName()); + Assertions.assertEquals(20, (long)bomData.getAge()); } }) .charset(charset) @@ -100,7 +95,7 @@ public class BomDataTest { @Override public void invokeHead(Map> headMap, AnalysisContext context) { String head = headMap.get(0).getStringValue(); - Assert.assertEquals("姓名", head); + Assertions.assertEquals("姓名", head); } @Override @@ -110,10 +105,10 @@ public class BomDataTest { @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(dataList.size(), 10); + Assertions.assertEquals(dataList.size(), 10); BomData bomData = dataList.get(0); - Assert.assertEquals("姓名0", bomData.getName()); - Assert.assertEquals(20L, (long)bomData.getAge()); + Assertions.assertEquals("姓名0", bomData.getName()); + Assertions.assertEquals(20L, (long)bomData.getAge()); } }).sheet().doRead(); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheDataTest.java index 10cb15d0..b1c242b3 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/cache/CacheDataTest.java @@ -21,16 +21,16 @@ import com.alibaba.excel.util.ClassUtils; import com.alibaba.excel.util.FieldUtils; import lombok.extern.slf4j.Slf4j; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) @Slf4j public class CacheDataTest { @@ -40,7 +40,7 @@ public class CacheDataTest { private static File fileCacheInvokeMemory; private static File fileCacheInvokeMemory2; - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("cache/cache.xlsx"); fileCacheInvoke = TestFileUtil.createNewFile("cache/fileCacheInvoke.xlsx"); @@ -54,14 +54,14 @@ public class CacheDataTest { Field field = FieldUtils.getField(ClassUtils.class, "FIELD_THREAD_LOCAL", true); ThreadLocal, FieldCache>> fieldThreadLocal = (ThreadLocal, FieldCache>>)field.get( ClassUtils.class.newInstance()); - Assert.assertNull(fieldThreadLocal.get()); + Assertions.assertNull(fieldThreadLocal.get()); EasyExcel.write(file07, CacheData.class).sheet().doWrite(data()); EasyExcel.read(file07, CacheData.class, new PageReadListener(dataList -> { - Assert.assertNotNull(fieldThreadLocal.get()); + Assertions.assertNotNull(fieldThreadLocal.get()); })) .sheet() .doRead(); - Assert.assertNull(fieldThreadLocal.get()); + Assertions.assertNull(fieldThreadLocal.get()); } @Test @@ -71,9 +71,9 @@ public class CacheDataTest { @Override public void invokeHeadMap(Map headMap, AnalysisContext context) { - Assert.assertEquals(2, headMap.size()); - Assert.assertEquals("姓名", headMap.get(0)); - Assert.assertEquals("年龄", headMap.get(1)); + Assertions.assertEquals(2, headMap.size()); + Assertions.assertEquals("姓名", headMap.get(0)); + Assertions.assertEquals("年龄", headMap.get(1)); } @Override @@ -100,9 +100,9 @@ public class CacheDataTest { @Override public void invokeHeadMap(Map headMap, AnalysisContext context) { - Assert.assertEquals(2, headMap.size()); - Assert.assertEquals("姓名2", headMap.get(0)); - Assert.assertEquals("年龄", headMap.get(1)); + Assertions.assertEquals(2, headMap.size()); + Assertions.assertEquals("姓名2", headMap.get(0)); + Assertions.assertEquals("年龄", headMap.get(1)); } @Override @@ -129,9 +129,9 @@ public class CacheDataTest { @Override public void invokeHeadMap(Map headMap, AnalysisContext context) { - Assert.assertEquals(2, headMap.size()); - Assert.assertEquals("姓名", headMap.get(0)); - Assert.assertEquals("年龄", headMap.get(1)); + Assertions.assertEquals(2, headMap.size()); + Assertions.assertEquals("姓名", headMap.get(0)); + Assertions.assertEquals("年龄", headMap.get(1)); } @Override @@ -164,9 +164,9 @@ public class CacheDataTest { @Override public void invokeHeadMap(Map headMap, AnalysisContext context) { - Assert.assertEquals(2, headMap.size()); - Assert.assertEquals("姓名", headMap.get(0)); - Assert.assertEquals("年龄", headMap.get(1)); + Assertions.assertEquals(2, headMap.size()); + Assertions.assertEquals("姓名", headMap.get(0)); + Assertions.assertEquals("年龄", headMap.get(1)); } @Override diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataListener.java index acafba47..8f4d079d 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataListener.java @@ -8,7 +8,7 @@ import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.fastjson2.JSON; -import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,16 +26,16 @@ public class CellDataDataListener extends AnalysisEventListener> headMap, AnalysisContext context) { String head = headMap.get(0).getStringValue(); - Assert.assertNotEquals("姓名", head); + Assertions.assertNotEquals("姓名", head); } @Override @@ -79,7 +79,7 @@ public class CharsetDataTest { @Override public void invokeHead(Map> headMap, AnalysisContext context) { String head = headMap.get(0).getStringValue(); - Assert.assertEquals("姓名", head); + Assertions.assertEquals("姓名", head); } @Override @@ -89,10 +89,10 @@ public class CharsetDataTest { @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(dataList.size(), 10); + Assertions.assertEquals(dataList.size(), 10); CharsetData charsetData = dataList.get(0); - Assert.assertEquals("姓名0", charsetData.getName()); - Assert.assertEquals(0, (long)charsetData.getAge()); + Assertions.assertEquals("姓名0", charsetData.getName()); + Assertions.assertEquals(0, (long)charsetData.getAge()); } }).charset(charset).sheet().doRead(); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java index bef3a42a..df621680 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java @@ -6,30 +6,27 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import com.alibaba.easyexcel.test.core.large.LargeData; -import com.alibaba.easyexcel.test.core.large.LargeDataListener; import com.alibaba.easyexcel.test.core.simple.SimpleData; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.cache.Ehcache; -import com.alibaba.excel.constant.EasyExcelConstants; import com.alibaba.excel.enums.ReadDefaultReturnEnum; import com.alibaba.excel.util.FileUtils; import com.alibaba.fastjson2.JSON; import lombok.extern.slf4j.Slf4j; import org.apache.poi.util.TempFile; -import org.junit.Assert; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * Compatible with some special files * * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) @Slf4j public class CompatibilityTest { @@ -38,9 +35,9 @@ public class CompatibilityTest { // https://github.com/alibaba/easyexcel/issues/2236 List> list = EasyExcel.read(TestFileUtil.getPath() + "compatibility/t01.xls").sheet() .doReadSync(); - Assert.assertEquals(2, list.size()); + Assertions.assertEquals(2, list.size()); Map row1 = list.get(1); - Assert.assertEquals("Q235(碳钢)", row1.get(0)); + Assertions.assertEquals("Q235(碳钢)", row1.get(0)); } @Test @@ -49,9 +46,9 @@ public class CompatibilityTest { List> list = EasyExcel.read(TestFileUtil.getPath() + "compatibility/t02.xlsx").sheet() .headRowNumber(0).doReadSync(); log.info("data:{}", JSON.toJSONString(list)); - Assert.assertEquals(3, list.size()); + Assertions.assertEquals(3, list.size()); Map row2 = list.get(2); - Assert.assertEquals("1,2-戊二醇", row2.get(2)); + Assertions.assertEquals("1,2-戊二醇", row2.get(2)); } @Test @@ -60,9 +57,9 @@ public class CompatibilityTest { List> list = EasyExcel.read(TestFileUtil.getPath() + "compatibility/t03.xlsx").sheet() .doReadSync(); log.info("data:{}", JSON.toJSONString(list)); - Assert.assertEquals(1, list.size()); + Assertions.assertEquals(1, list.size()); Map row0 = list.get(0); - Assert.assertEquals(12, row0.size()); + Assertions.assertEquals(12, row0.size()); } @Test @@ -71,9 +68,9 @@ public class CompatibilityTest { List> list = EasyExcel.read(TestFileUtil.getPath() + "compatibility/t04.xlsx").sheet() .doReadSync(); log.info("data:{}", JSON.toJSONString(list)); - Assert.assertEquals(56, list.size()); + Assertions.assertEquals(56, list.size()); Map row0 = list.get(0); - Assert.assertEquals("QQSJK28F152A012242S0081", row0.get(5)); + Assertions.assertEquals("QQSJK28F152A012242S0081", row0.get(5)); } @Test @@ -85,11 +82,11 @@ public class CompatibilityTest { .sheet() .doReadSync(); log.info("data:{}", JSON.toJSONString(list)); - Assert.assertEquals("2023-01-01 00:00:00", list.get(0).get(0)); - Assert.assertEquals("2023-01-01 00:00:00", list.get(1).get(0)); - Assert.assertEquals("2023-01-01 00:00:00", list.get(2).get(0)); - Assert.assertEquals("2023-01-01 00:00:01", list.get(3).get(0)); - Assert.assertEquals("2023-01-01 00:00:01", list.get(4).get(0)); + Assertions.assertEquals("2023-01-01 00:00:00", list.get(0).get(0)); + Assertions.assertEquals("2023-01-01 00:00:00", list.get(1).get(0)); + Assertions.assertEquals("2023-01-01 00:00:00", list.get(2).get(0)); + Assertions.assertEquals("2023-01-01 00:00:01", list.get(3).get(0)); + Assertions.assertEquals("2023-01-01 00:00:01", list.get(4).get(0)); } @Test @@ -101,7 +98,7 @@ public class CompatibilityTest { .sheet() .doReadSync(); log.info("data:{}", JSON.toJSONString(list)); - Assert.assertEquals("2087.03", list.get(0).get(2)); + Assertions.assertEquals("2087.03", list.get(0).get(2)); } @Test @@ -114,14 +111,14 @@ public class CompatibilityTest { .sheet() .doReadSync(); log.info("data:{}", JSON.toJSONString(list)); - Assert.assertEquals(0, new BigDecimal("24.1998124").compareTo((BigDecimal)list.get(0).get(11))); + Assertions.assertEquals(0, new BigDecimal("24.1998124").compareTo((BigDecimal)list.get(0).get(11))); list = EasyExcel .read(TestFileUtil.getPath() + "compatibility/t07.xlsx") .sheet() .doReadSync(); log.info("data:{}", JSON.toJSONString(list)); - Assert.assertEquals("24.20", list.get(0).get(11)); + Assertions.assertEquals("24.20", list.get(0).get(11)); } @Test @@ -137,7 +134,7 @@ public class CompatibilityTest { .readCache(new Ehcache(null, 20)) .sheet() .doReadSync(); - Assert.assertEquals(10L, list.size()); + Assertions.assertEquals(10L, list.size()); FileUtils.delete(new File(System.getProperty(TempFile.JAVA_IO_TMPDIR))); @@ -145,7 +142,7 @@ public class CompatibilityTest { .readCache(new Ehcache(null, 20)) .sheet() .doReadSync(); - Assert.assertEquals(10L, list.size()); + Assertions.assertEquals(10L, list.size()); } @Test @@ -157,9 +154,9 @@ public class CompatibilityTest { .sheet() .doReadSync(); log.info("data:{}", JSON.toJSONString(list)); - Assert.assertEquals(1, list.size()); + Assertions.assertEquals(1, list.size()); - Assert.assertEquals("SH_x000D_Z002", list.get(0).get(0)); + Assertions.assertEquals("SH_x000D_Z002", list.get(0).get(0)); } private List data() { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java index a7327d42..adb4b164 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java @@ -2,19 +2,15 @@ package com.alibaba.easyexcel.test.core.converter; import java.math.BigDecimal; import java.math.BigInteger; -import java.text.ParseException; -import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import com.alibaba.easyexcel.test.util.TestUtil; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; -import com.alibaba.excel.exception.ExcelCommonException; -import com.alibaba.excel.util.DateUtils; import com.alibaba.fastjson2.JSON; -import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,22 +28,22 @@ public class ConverterDataListener extends AnalysisEventListener context = new WriteConverterContext<>(); context.setValue(95.62F); WriteCellData writeCellData = floatNumberConverter.convertToExcelData(context); - Assert.assertEquals(0, writeCellData.getNumberValue().compareTo(new BigDecimal("95.62"))); + Assertions.assertEquals(0, writeCellData.getNumberValue().compareTo(new BigDecimal("95.62"))); } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java index f56eab46..eae1fa92 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java @@ -13,7 +13,7 @@ import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.excel.util.DateUtils; import com.alibaba.fastjson2.JSON; -import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,54 +31,56 @@ public class ReadAllConverterDataListener extends AnalysisEventListener { @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(list.size(), 10); - Assert.assertEquals(list.get(0).getName(), "姓名0"); - Assert.assertEquals((int)(context.readSheetHolder().getSheetNo()), 0); - Assert.assertEquals( + Assertions.assertEquals(list.size(), 10); + Assertions.assertEquals(list.get(0).getName(), "姓名0"); + Assertions.assertEquals((int)(context.readSheetHolder().getSheetNo()), 0); + Assertions.assertEquals( context.readSheetHolder().getExcelReadHeadProperty().getHeadMap().get(0).getHeadNameList().get(0), "姓名"); LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataTest.java index b7f63cf0..8c2f0dca 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataTest.java @@ -14,15 +14,15 @@ import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.support.ExcelTypeEnum; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class EncryptDataTest { private static File file07; @@ -39,7 +39,7 @@ public class EncryptDataTest { System.out.println(decimalFormat.format(bigDecimal)); } - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("encrypt07.xlsx"); file03 = TestFileUtil.createNewFile("encrypt03.xls"); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataListener.java index 8009d4db..95b6ddc3 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataListener.java @@ -3,14 +3,14 @@ package com.alibaba.easyexcel.test.core.exception; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -38,10 +38,10 @@ public class ExceptionDataListener extends AnalysisEventListener @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(list.size(), 8); - Assert.assertEquals(list.get(0).getName(), "姓名0"); - Assert.assertEquals((int)(context.readSheetHolder().getSheetNo()), 0); - Assert.assertEquals( + Assertions.assertEquals(list.size(), 8); + Assertions.assertEquals(list.get(0).getName(), "姓名0"); + Assertions.assertEquals((int)(context.readSheetHolder().getSheetNo()), 0); + Assertions.assertEquals( context.readSheetHolder().getExcelReadHeadProperty().getHeadMap().get(0).getHeadNameList().get(0), "姓名"); LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataTest.java index fb1ef815..b06a105e 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataTest.java @@ -9,16 +9,16 @@ import java.util.List; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class ExceptionDataTest { private static File file07; @@ -27,7 +27,7 @@ public class ExceptionDataTest { private static File fileException03; private static File fileCsv; - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("exception.xlsx"); file03 = TestFileUtil.createNewFile("exception.xls"); @@ -63,10 +63,10 @@ public class ExceptionDataTest { private void readAndWriteException(File file) throws Exception { EasyExcel.write(new FileOutputStream(file), ExceptionData.class).sheet().doWrite(data()); - ArithmeticException exception = Assert.assertThrows(ArithmeticException.class, () -> EasyExcel.read( + ArithmeticException exception = Assertions.assertThrows(ArithmeticException.class, () -> EasyExcel.read( new FileInputStream(file), ExceptionData.class, new ExceptionThrowDataListener()).sheet().doRead()); - Assert.assertEquals("/ by zero",exception.getMessage()); + Assertions.assertEquals("/ by zero", exception.getMessage()); } private void readAndWrite(File file) throws Exception { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java index 86e32072..31244e15 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java @@ -10,16 +10,16 @@ import java.util.Set; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class ExcludeOrIncludeDataTest { private static File excludeIndex07; @@ -42,7 +42,7 @@ public class ExcludeOrIncludeDataTest { private static File includeFieldNameOrderIndex03; private static File includeFieldNameOrderIndexCsv; - @BeforeClass + @BeforeAll public static void init() { excludeIndex07 = TestFileUtil.createNewFile("excludeIndex.xlsx"); excludeIndex03 = TestFileUtil.createNewFile("excludeIndex.xls"); @@ -94,7 +94,6 @@ public class ExcludeOrIncludeDataTest { excludeFieldName(excludeFieldNameCsv); } - @Test public void t21IncludeIndex07() { includeIndex(includeIndex07); @@ -162,11 +161,11 @@ public class ExcludeOrIncludeDataTest { EasyExcel.write(file, ExcludeOrIncludeData.class).excludeColumnIndexes(excludeColumnIndexes).sheet() .doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); - Assert.assertEquals(1, dataMap.size()); + Assertions.assertEquals(1, dataMap.size()); Map record = dataMap.get(0); - Assert.assertEquals(2, record.size()); - Assert.assertEquals("column2", record.get(0)); - Assert.assertEquals("column3", record.get(1)); + Assertions.assertEquals(2, record.size()); + Assertions.assertEquals("column2", record.get(0)); + Assertions.assertEquals("column3", record.get(1)); } @@ -178,10 +177,10 @@ public class ExcludeOrIncludeDataTest { EasyExcel.write(file, ExcludeOrIncludeData.class).excludeColumnFieldNames(excludeColumnFieldNames).sheet() .doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); - Assert.assertEquals(1, dataMap.size()); + Assertions.assertEquals(1, dataMap.size()); Map record = dataMap.get(0); - Assert.assertEquals(1, record.size()); - Assert.assertEquals("column2", record.get(0)); + Assertions.assertEquals(1, record.size()); + Assertions.assertEquals("column2", record.get(0)); } @@ -192,11 +191,11 @@ public class ExcludeOrIncludeDataTest { EasyExcel.write(file, ExcludeOrIncludeData.class).includeColumnIndexes(includeColumnIndexes).sheet() .doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); - Assert.assertEquals(1, dataMap.size()); + Assertions.assertEquals(1, dataMap.size()); Map record = dataMap.get(0); - Assert.assertEquals(2, record.size()); - Assert.assertEquals("column2", record.get(0)); - Assert.assertEquals("column3", record.get(1)); + Assertions.assertEquals(2, record.size()); + Assertions.assertEquals("column2", record.get(0)); + Assertions.assertEquals("column3", record.get(1)); } @@ -207,14 +206,13 @@ public class ExcludeOrIncludeDataTest { EasyExcel.write(file, ExcludeOrIncludeData.class).includeColumnFieldNames(includeColumnFieldNames).sheet() .doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); - Assert.assertEquals(1, dataMap.size()); + Assertions.assertEquals(1, dataMap.size()); Map record = dataMap.get(0); - Assert.assertEquals(2, record.size()); - Assert.assertEquals("column2", record.get(0)); - Assert.assertEquals("column3", record.get(1)); + Assertions.assertEquals(2, record.size()); + Assertions.assertEquals("column2", record.get(0)); + Assertions.assertEquals("column3", record.get(1)); } - private void includeFieldNameOrderIndex(File file) { List includeColumnIndexes = new ArrayList<>(); includeColumnIndexes.add(3); @@ -227,14 +225,15 @@ public class ExcludeOrIncludeDataTest { sheet() .doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); - Assert.assertEquals(1, dataMap.size()); + Assertions.assertEquals(1, dataMap.size()); Map record = dataMap.get(0); - Assert.assertEquals(4, record.size()); - Assert.assertEquals("column4", record.get(0)); - Assert.assertEquals("column2", record.get(1)); - Assert.assertEquals("column3", record.get(2)); - Assert.assertEquals("column1", record.get(3)); + Assertions.assertEquals(4, record.size()); + Assertions.assertEquals("column4", record.get(0)); + Assertions.assertEquals("column2", record.get(1)); + Assertions.assertEquals("column3", record.get(2)); + Assertions.assertEquals("column1", record.get(3)); } + private void includeFieldNameOrder(File file) { List includeColumnFieldNames = new ArrayList<>(); includeColumnFieldNames.add("column4"); @@ -246,12 +245,12 @@ public class ExcludeOrIncludeDataTest { sheet() .doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); - Assert.assertEquals(1, dataMap.size()); + Assertions.assertEquals(1, dataMap.size()); Map record = dataMap.get(0); - Assert.assertEquals(3, record.size()); - Assert.assertEquals("column4", record.get(0)); - Assert.assertEquals("column2", record.get(1)); - Assert.assertEquals("column3", record.get(2)); + Assertions.assertEquals(3, record.size()); + Assertions.assertEquals("column4", record.get(0)); + Assertions.assertEquals("column2", record.get(1)); + Assertions.assertEquals("column3", record.get(2)); } private List data() { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataListener.java index d58c4cdb..e11b1f16 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataListener.java @@ -1,14 +1,14 @@ package com.alibaba.easyexcel.test.core.extra; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.metadata.CellExtra; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -26,28 +26,28 @@ public class ExtraDataListener extends AnalysisEventListener { LOGGER.info("extra data:{}", JSON.toJSONString(extra)); switch (extra.getType()) { case COMMENT: - Assert.assertEquals("批注的内容", extra.getText()); - Assert.assertEquals(4, (int)extra.getRowIndex()); - Assert.assertEquals(0, (int)extra.getColumnIndex()); + Assertions.assertEquals("批注的内容", extra.getText()); + Assertions.assertEquals(4, (int)extra.getRowIndex()); + Assertions.assertEquals(0, (int)extra.getColumnIndex()); break; case HYPERLINK: if ("Sheet1!A1".equals(extra.getText())) { - Assert.assertEquals(1, (int)extra.getRowIndex()); - Assert.assertEquals(0, (int)extra.getColumnIndex()); + Assertions.assertEquals(1, (int)extra.getRowIndex()); + Assertions.assertEquals(0, (int)extra.getColumnIndex()); } else if ("Sheet2!A1".equals(extra.getText())) { - Assert.assertEquals(2, (int)extra.getFirstRowIndex()); - Assert.assertEquals(0, (int)extra.getFirstColumnIndex()); - Assert.assertEquals(3, (int)extra.getLastRowIndex()); - Assert.assertEquals(1, (int)extra.getLastColumnIndex()); + Assertions.assertEquals(2, (int)extra.getFirstRowIndex()); + Assertions.assertEquals(0, (int)extra.getFirstColumnIndex()); + Assertions.assertEquals(3, (int)extra.getLastRowIndex()); + Assertions.assertEquals(1, (int)extra.getLastColumnIndex()); } else { - Assert.fail("Unknown hyperlink!"); + Assertions.fail("Unknown hyperlink!"); } break; case MERGE: - Assert.assertEquals(5, (int)extra.getFirstRowIndex()); - Assert.assertEquals(0, (int)extra.getFirstColumnIndex()); - Assert.assertEquals(6, (int)extra.getLastRowIndex()); - Assert.assertEquals(1, (int)extra.getLastColumnIndex()); + Assertions.assertEquals(5, (int)extra.getFirstRowIndex()); + Assertions.assertEquals(0, (int)extra.getFirstColumnIndex()); + Assertions.assertEquals(6, (int)extra.getLastRowIndex()); + Assertions.assertEquals(1, (int)extra.getLastColumnIndex()); break; default: } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataTest.java index 92f35574..9409a8df 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataTest.java @@ -2,12 +2,6 @@ package com.alibaba.easyexcel.test.core.extra; import java.io.File; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.context.AnalysisContext; @@ -16,6 +10,12 @@ import com.alibaba.excel.metadata.CellExtra; import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -26,7 +26,7 @@ public class ExtraDataTest { private static File extraRelationships; - @BeforeClass + @BeforeAll public static void init() { file03 = TestFileUtil.readFile("extra" + File.separator + "extra.xls"); file07 = TestFileUtil.readFile("extra" + File.separator + "extra.xlsx"); @@ -60,13 +60,13 @@ public class ExtraDataTest { switch (extra.getType()) { case HYPERLINK: if ("222222222".equals(extra.getText())) { - Assert.assertEquals(1, (int)extra.getRowIndex()); - Assert.assertEquals(0, (int)extra.getColumnIndex()); + Assertions.assertEquals(1, (int)extra.getRowIndex()); + Assertions.assertEquals(0, (int)extra.getColumnIndex()); } else if ("333333333333".equals(extra.getText())) { - Assert.assertEquals(1, (int)extra.getRowIndex()); - Assert.assertEquals(1, (int)extra.getColumnIndex()); + Assertions.assertEquals(1, (int)extra.getRowIndex()); + Assertions.assertEquals(1, (int)extra.getColumnIndex()); } else { - Assert.fail("Unknown hyperlink!"); + Assertions.fail("Unknown hyperlink!"); } break; default: diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java index 90772691..6d88f848 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java @@ -16,16 +16,16 @@ import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.excel.write.metadata.fill.FillWrapper; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class FillDataTest { private static File file07; @@ -51,7 +51,7 @@ public class FillDataTest { private static File fileComposite03; private static File compositeFillTemplate03; - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("fill07.xlsx"); file03 = TestFileUtil.createNewFile("fill03.xls"); @@ -89,9 +89,9 @@ public class FillDataTest { @Test public void t03FillCsv() { - ExcelGenerateException excelGenerateException = Assert.assertThrows(ExcelGenerateException.class, + ExcelGenerateException excelGenerateException = Assertions.assertThrows(ExcelGenerateException.class, () -> fill(fileCsv, simpleTemplateCsv)); - Assert.assertEquals("csv cannot use template.", excelGenerateException.getMessage()); + Assertions.assertEquals("csv cannot use template.", excelGenerateException.getMessage()); } @Test @@ -159,11 +159,11 @@ public class FillDataTest { List list = EasyExcel.read(file).ignoreEmptyRow(false).sheet().headRowNumber(0).doReadSync(); Map map0 = (Map)list.get(0); - Assert.assertEquals("张三", map0.get(21)); + Assertions.assertEquals("张三", map0.get(21)); Map map27 = (Map)list.get(27); - Assert.assertEquals("张三", map27.get(0)); + Assertions.assertEquals("张三", map27.get(0)); Map map29 = (Map)list.get(29); - Assert.assertEquals("张三", map29.get(3)); + Assertions.assertEquals("张三", map29.get(3)); } private void horizontalFill(File file, File template) { @@ -179,9 +179,9 @@ public class FillDataTest { } List list = EasyExcel.read(file).sheet().headRowNumber(0).doReadSync(); - Assert.assertEquals(list.size(), 5L); + Assertions.assertEquals(list.size(), 5L); Map map0 = (Map)list.get(0); - Assert.assertEquals("张三", map0.get(2)); + Assertions.assertEquals("张三", map0.get(2)); } private void complexFill(File file, File template) { @@ -196,9 +196,9 @@ public class FillDataTest { excelWriter.fill(map, writeSheet); } List list = EasyExcel.read(file).sheet().headRowNumber(3).doReadSync(); - Assert.assertEquals(list.size(), 21L); + Assertions.assertEquals(list.size(), 21L); Map map19 = (Map)list.get(19); - Assert.assertEquals("张三", map19.get(0)); + Assertions.assertEquals("张三", map19.get(0)); } private void fill(File file, File template) { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationDataTest.java index 8d1d56bc..2e8275b5 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationDataTest.java @@ -22,17 +22,17 @@ import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFPicture; import org.apache.poi.xssf.usermodel.XSSFShape; import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class FillAnnotationDataTest { private static File file07; @@ -40,7 +40,7 @@ public class FillAnnotationDataTest { private static File fileTemplate07; private static File fileTemplate03; - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("fillAnnotation07.xlsx"); file03 = TestFileUtil.createNewFile("fillAnnotation03.xls"); @@ -65,14 +65,14 @@ public class FillAnnotationDataTest { Sheet sheet = workbook.getSheetAt(0); Row row1 = sheet.getRow(1); - Assert.assertEquals(2000, row1.getHeight(), 0); + Assertions.assertEquals(2000, row1.getHeight(), 0); Cell cell10 = row1.getCell(0); Date date = cell10.getDateCellValue(); - Assert.assertEquals(DateUtils.parseDate("2020-01-01 01:01:01").getTime(), date.getTime()); + Assertions.assertEquals(DateUtils.parseDate("2020-01-01 01:01:01").getTime(), date.getTime()); String dataFormatString = cell10.getCellStyle().getDataFormatString(); - Assert.assertEquals("yyyy年MM月dd日HH时mm分ss秒", dataFormatString); + Assertions.assertEquals("yyyy年MM月dd日HH时mm分ss秒", dataFormatString); Cell cell11 = row1.getCell(1); - Assert.assertEquals(99.99, cell11.getNumericCellValue(), 2); + Assertions.assertEquals(99.99, cell11.getNumericCellValue(), 2); boolean hasMerge = false; for (CellRangeAddress mergedRegion : sheet.getMergedRegions()) { if (mergedRegion.getFirstRow() == 1 && mergedRegion.getLastRow() == 1 @@ -81,25 +81,25 @@ public class FillAnnotationDataTest { break; } } - Assert.assertTrue(hasMerge); + Assertions.assertTrue(hasMerge); if (sheet instanceof XSSFSheet) { XSSFSheet xssfSheet = (XSSFSheet)sheet; List shapeList = xssfSheet.getDrawingPatriarch().getShapes(); XSSFShape shape0 = shapeList.get(0); - Assert.assertTrue(shape0 instanceof XSSFPicture); + Assertions.assertTrue(shape0 instanceof XSSFPicture); XSSFPicture picture0 = (XSSFPicture)shape0; CTMarker ctMarker0 = picture0.getPreferredSize().getFrom(); - Assert.assertEquals(1, ctMarker0.getRow()); - Assert.assertEquals(4, ctMarker0.getCol()); + Assertions.assertEquals(1, ctMarker0.getRow()); + Assertions.assertEquals(4, ctMarker0.getCol()); } else { HSSFSheet hssfSheet = (HSSFSheet)sheet; List shapeList = hssfSheet.getDrawingPatriarch().getChildren(); HSSFShape shape0 = shapeList.get(0); - Assert.assertTrue(shape0 instanceof HSSFPicture); + Assertions.assertTrue(shape0 instanceof HSSFPicture); HSSFPicture picture0 = (HSSFPicture)shape0; HSSFClientAnchor anchor = (HSSFClientAnchor)picture0.getAnchor(); - Assert.assertEquals(1, anchor.getRow1()); - Assert.assertEquals(4, anchor.getCol1()); + Assertions.assertEquals(1, anchor.getRow1()); + Assertions.assertEquals(4, anchor.getCol1()); } } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedTest.java index 13367904..406255bc 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedTest.java @@ -25,16 +25,16 @@ import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class FillStyleAnnotatedTest { private static File FillStyleAnnotated07; @@ -42,7 +42,7 @@ public class FillStyleAnnotatedTest { private static File fileStyleTemplate07; private static File fileStyleTemplate03; - @BeforeClass + @BeforeAll public static void init() { FillStyleAnnotated07 = TestFileUtil.createNewFile("FillStyleAnnotated07.xlsx"); FillStyleAnnotated03 = TestFileUtil.createNewFile("FillStyleAnnotated03.xls"); @@ -61,46 +61,47 @@ public class FillStyleAnnotatedTest { private void t01Fill07check(XSSFRow row) { XSSFCell cell0 = row.getCell(0); - Assert.assertEquals("张三", cell0.getStringCellValue()); - Assert.assertEquals(49, cell0.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFFFF00", cell0.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF808000", cell0.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell0.getCellStyle().getFont().getBold()); + Assertions.assertEquals("张三", cell0.getStringCellValue()); + Assertions.assertEquals(49, cell0.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFFFF00", cell0.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF808000", cell0.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell0.getCellStyle().getFont().getBold()); XSSFCell cell1 = row.getCell(1); - Assert.assertEquals(5.2, cell1.getNumericCellValue(), 1); - Assert.assertEquals(0, cell1.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF0000", cell1.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF800000", cell1.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell1.getCellStyle().getFont().getBold()); + Assertions.assertEquals(5.2, cell1.getNumericCellValue(), 1); + Assertions.assertEquals(0, cell1.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF0000", cell1.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF800000", cell1.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell1.getCellStyle().getFont().getBold()); XSSFCell cell2 = row.getCell(2); - Assert.assertEquals("2020-01-01 01:01:01", DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); - Assert.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); - Assert.assertEquals("FF008000", cell2.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF003300", cell2.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell2.getCellStyle().getFont().getBold()); + Assertions.assertEquals("2020-01-01 01:01:01", + DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); + Assertions.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); + Assertions.assertEquals("FF008000", cell2.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF003300", cell2.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell2.getCellStyle().getFont().getBold()); XSSFCell cell3 = row.getCell(3); - Assert.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); - Assert.assertEquals(0, cell3.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF0000", cell3.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FFEEECE1", cell3.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell3.getCellStyle().getFont().getBold()); + Assertions.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); + Assertions.assertEquals(0, cell3.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF0000", cell3.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FFEEECE1", cell3.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell3.getCellStyle().getFont().getBold()); XSSFCell cell4 = row.getCell(4); - Assert.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); - Assert.assertEquals(0, cell4.getCellStyle().getDataFormat()); - Assert.assertEquals("FFC00000", cell4.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF000000", cell4.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertFalse(cell4.getCellStyle().getFont().getBold()); + Assertions.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); + Assertions.assertEquals(0, cell4.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFC00000", cell4.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF000000", cell4.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertFalse(cell4.getCellStyle().getFont().getBold()); XSSFCell cell5 = row.getCell(5); - Assert.assertEquals("空", cell5.getStringCellValue()); - Assert.assertEquals(0, cell5.getCellStyle().getDataFormat()); - Assert.assertEquals("FFF79646", cell5.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF8064A2", cell5.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertFalse(cell5.getCellStyle().getFont().getBold()); + Assertions.assertEquals("空", cell5.getStringCellValue()); + Assertions.assertEquals(0, cell5.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFF79646", cell5.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF8064A2", cell5.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertFalse(cell5.getCellStyle().getFont().getBold()); } @Test @@ -114,150 +115,153 @@ public class FillStyleAnnotatedTest { private void t02Fill03check(HSSFWorkbook workbook, HSSFRow row) { HSSFCell cell0 = row.getCell(0); - Assert.assertEquals("张三", cell0.getStringCellValue()); - Assert.assertEquals(49, cell0.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF:FFFF:0", cell0.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("8080:8080:0", cell0.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("张三", cell0.getStringCellValue()); + Assertions.assertEquals(49, cell0.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF:FFFF:0", cell0.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("8080:8080:0", cell0.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell0.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell0.getCellStyle().getFont(workbook).getBold()); HSSFCell cell1 = row.getCell(1); - Assert.assertEquals(5.2, cell1.getNumericCellValue(), 1); - Assert.assertEquals(0, cell1.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF:0:0", cell1.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("8080:0:0", cell1.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals(5.2, cell1.getNumericCellValue(), 1); + Assertions.assertEquals(0, cell1.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF:0:0", cell1.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("8080:0:0", cell1.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell1.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell1.getCellStyle().getFont(workbook).getBold()); HSSFCell cell2 = row.getCell(2); - Assert.assertEquals("2020-01-01 01:01:01", DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); - Assert.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); - Assert.assertEquals("0:8080:0", cell2.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("0:3333:0", cell2.getCellStyle().getFont(workbook).getHSSFColor(workbook).getHexString()); - Assert.assertTrue(cell2.getCellStyle().getFont(workbook).getBold()); + Assertions.assertEquals("2020-01-01 01:01:01", + DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); + Assertions.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); + Assertions.assertEquals("0:8080:0", cell2.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("0:3333:0", cell2.getCellStyle().getFont(workbook).getHSSFColor(workbook) + .getHexString()); + Assertions.assertTrue(cell2.getCellStyle().getFont(workbook).getBold()); HSSFCell cell3 = row.getCell(3); - Assert.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); - Assert.assertEquals(0, cell3.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF:0:0", cell3.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("FFFF:FFFF:9999", cell3.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); + Assertions.assertEquals(0, cell3.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF:0:0", cell3.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("FFFF:FFFF:9999", cell3.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell3.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell3.getCellStyle().getFont(workbook).getBold()); HSSFCell cell4 = row.getCell(4); - Assert.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); - Assert.assertEquals(0, cell4.getCellStyle().getDataFormat()); - Assert.assertEquals("9999:3333:0", cell4.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("3333:3333:3333", cell4.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); + Assertions.assertEquals(0, cell4.getCellStyle().getDataFormat()); + Assertions.assertEquals("9999:3333:0", cell4.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("3333:3333:3333", cell4.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertFalse(cell4.getCellStyle().getFont(workbook).getBold()); + Assertions.assertFalse(cell4.getCellStyle().getFont(workbook).getBold()); HSSFCell cell5 = row.getCell(5); - Assert.assertEquals("空", cell5.getStringCellValue()); - Assert.assertEquals(0, cell5.getCellStyle().getDataFormat()); - Assert.assertEquals("9999:3333:0", cell5.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("CCCC:9999:FFFF", cell5.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("空", cell5.getStringCellValue()); + Assertions.assertEquals(0, cell5.getCellStyle().getDataFormat()); + Assertions.assertEquals("9999:3333:0", cell5.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("CCCC:9999:FFFF", cell5.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertFalse(cell5.getCellStyle().getFont(workbook).getBold()); + Assertions.assertFalse(cell5.getCellStyle().getFont(workbook).getBold()); } private void fill(File file, File template) throws Exception { EasyExcel.write(file, FillStyleAnnotatedData.class).withTemplate(template).sheet().doFill(data()); } - private void t11FillStyleHandler07check(XSSFRow row) { XSSFCell cell0 = row.getCell(0); - Assert.assertEquals("张三", cell0.getStringCellValue()); - Assert.assertEquals(49, cell0.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFFFF00", cell0.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF808000", cell0.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell0.getCellStyle().getFont().getBold()); + Assertions.assertEquals("张三", cell0.getStringCellValue()); + Assertions.assertEquals(49, cell0.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFFFF00", cell0.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF808000", cell0.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell0.getCellStyle().getFont().getBold()); XSSFCell cell1 = row.getCell(1); - Assert.assertEquals("5", cell1.getStringCellValue()); - Assert.assertEquals(0, cell1.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF0000", cell1.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF800000", cell1.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell1.getCellStyle().getFont().getBold()); + Assertions.assertEquals("5", cell1.getStringCellValue()); + Assertions.assertEquals(0, cell1.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF0000", cell1.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF800000", cell1.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell1.getCellStyle().getFont().getBold()); XSSFCell cell2 = row.getCell(2); - Assert.assertEquals("2020-01-01 01:01:01", DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); - Assert.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); - Assert.assertEquals("FF008000", cell2.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF003300", cell2.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell2.getCellStyle().getFont().getBold()); + Assertions.assertEquals("2020-01-01 01:01:01", + DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); + Assertions.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); + Assertions.assertEquals("FF008000", cell2.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF003300", cell2.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell2.getCellStyle().getFont().getBold()); XSSFCell cell3 = row.getCell(3); - Assert.assertEquals("张三今年5岁了", cell3.getStringCellValue()); - Assert.assertEquals(0, cell3.getCellStyle().getDataFormat()); - Assert.assertEquals("FF0000FF", cell3.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF000080", cell3.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell3.getCellStyle().getFont().getBold()); + Assertions.assertEquals("张三今年5岁了", cell3.getStringCellValue()); + Assertions.assertEquals(0, cell3.getCellStyle().getDataFormat()); + Assertions.assertEquals("FF0000FF", cell3.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF000080", cell3.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell3.getCellStyle().getFont().getBold()); XSSFCell cell4 = row.getCell(4); - Assert.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); - Assert.assertEquals(0, cell4.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFFFF00", cell4.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF808000", cell4.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell4.getCellStyle().getFont().getBold()); + Assertions.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); + Assertions.assertEquals(0, cell4.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFFFF00", cell4.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF808000", cell4.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell4.getCellStyle().getFont().getBold()); XSSFCell cell5 = row.getCell(5); - Assert.assertEquals("空", cell5.getStringCellValue()); - Assert.assertEquals(0, cell5.getCellStyle().getDataFormat()); - Assert.assertEquals("FF008080", cell5.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF003366", cell5.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell5.getCellStyle().getFont().getBold()); + Assertions.assertEquals("空", cell5.getStringCellValue()); + Assertions.assertEquals(0, cell5.getCellStyle().getDataFormat()); + Assertions.assertEquals("FF008080", cell5.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF003366", cell5.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell5.getCellStyle().getFont().getBold()); } - private void t12FillStyleHandler03check(HSSFWorkbook workbook, HSSFRow row) { HSSFCell cell0 = row.getCell(0); - Assert.assertEquals("张三", cell0.getStringCellValue()); - Assert.assertEquals(49, cell0.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF:FFFF:0", cell0.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("8080:8080:0", cell0.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("张三", cell0.getStringCellValue()); + Assertions.assertEquals(49, cell0.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF:FFFF:0", cell0.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("8080:8080:0", cell0.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell0.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell0.getCellStyle().getFont(workbook).getBold()); HSSFCell cell1 = row.getCell(1); - Assert.assertEquals("5", cell1.getStringCellValue()); - Assert.assertEquals(0, cell1.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF:0:0", cell1.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("8080:0:0", cell1.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("5", cell1.getStringCellValue()); + Assertions.assertEquals(0, cell1.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF:0:0", cell1.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("8080:0:0", cell1.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell1.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell1.getCellStyle().getFont(workbook).getBold()); HSSFCell cell2 = row.getCell(2); - Assert.assertEquals("2020-01-01 01:01:01", DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); - Assert.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); - Assert.assertEquals("0:8080:0", cell2.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("0:3333:0", cell2.getCellStyle().getFont(workbook).getHSSFColor(workbook).getHexString()); - Assert.assertTrue(cell2.getCellStyle().getFont(workbook).getBold()); + Assertions.assertEquals("2020-01-01 01:01:01", + DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); + Assertions.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); + Assertions.assertEquals("0:8080:0", cell2.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("0:3333:0", cell2.getCellStyle().getFont(workbook).getHSSFColor(workbook) + .getHexString()); + Assertions.assertTrue(cell2.getCellStyle().getFont(workbook).getBold()); HSSFCell cell3 = row.getCell(3); - Assert.assertEquals("张三今年5岁了", cell3.getStringCellValue()); - Assert.assertEquals(0, cell3.getCellStyle().getDataFormat()); - Assert.assertEquals("0:0:FFFF", cell3.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("0:0:8080", cell3.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("张三今年5岁了", cell3.getStringCellValue()); + Assertions.assertEquals(0, cell3.getCellStyle().getDataFormat()); + Assertions.assertEquals("0:0:FFFF", cell3.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("0:0:8080", cell3.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell3.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell3.getCellStyle().getFont(workbook).getBold()); HSSFCell cell4 = row.getCell(4); - Assert.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); - Assert.assertEquals(0, cell4.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF:FFFF:0", cell4.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("8080:8080:0", cell4.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); + Assertions.assertEquals(0, cell4.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF:FFFF:0", cell4.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("8080:8080:0", cell4.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell4.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell4.getCellStyle().getFont(workbook).getBold()); HSSFCell cell5 = row.getCell(5); - Assert.assertEquals("空", cell5.getStringCellValue()); - Assert.assertEquals(0, cell5.getCellStyle().getDataFormat()); - Assert.assertEquals("0:8080:8080", cell5.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("0:3333:6666", cell5.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("空", cell5.getStringCellValue()); + Assertions.assertEquals(0, cell5.getCellStyle().getDataFormat()); + Assertions.assertEquals("0:8080:8080", cell5.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("0:3333:6666", cell5.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell5.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell5.getCellStyle().getFont(workbook).getBold()); } private void fillStyleHandler(File file, File template) throws Exception { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleDataTest.java index 210a5b9f..3276b039 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleDataTest.java @@ -24,16 +24,16 @@ import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class FillStyleDataTest { private static File fileStyle07; @@ -43,7 +43,7 @@ public class FillStyleDataTest { private static File fileStyleTemplate07; private static File fileStyleTemplate03; - @BeforeClass + @BeforeAll public static void init() { fileStyle07 = TestFileUtil.createNewFile("fileStyle07.xlsx"); fileStyle03 = TestFileUtil.createNewFile("fileStyle03.xls"); @@ -64,46 +64,47 @@ public class FillStyleDataTest { private void t01Fill07check(XSSFRow row) { XSSFCell cell0 = row.getCell(0); - Assert.assertEquals("张三", cell0.getStringCellValue()); - Assert.assertEquals(49, cell0.getCellStyle().getDataFormat()); - Assert.assertEquals("FF00B050", cell0.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF7030A0", cell0.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell0.getCellStyle().getFont().getBold()); + Assertions.assertEquals("张三", cell0.getStringCellValue()); + Assertions.assertEquals(49, cell0.getCellStyle().getDataFormat()); + Assertions.assertEquals("FF00B050", cell0.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF7030A0", cell0.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell0.getCellStyle().getFont().getBold()); XSSFCell cell1 = row.getCell(1); - Assert.assertEquals(5.2, cell1.getNumericCellValue(), 1); - Assert.assertEquals(0, cell1.getCellStyle().getDataFormat()); - Assert.assertEquals("FF92D050", cell1.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF4BACC6", cell1.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertFalse(cell1.getCellStyle().getFont().getBold()); + Assertions.assertEquals(5.2, cell1.getNumericCellValue(), 1); + Assertions.assertEquals(0, cell1.getCellStyle().getDataFormat()); + Assertions.assertEquals("FF92D050", cell1.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF4BACC6", cell1.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertFalse(cell1.getCellStyle().getFont().getBold()); XSSFCell cell2 = row.getCell(2); - Assert.assertEquals("2020-01-01 01:01:01", DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); - Assert.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); - Assert.assertEquals("FFFFC000", cell2.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FFC0504D", cell2.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell2.getCellStyle().getFont().getBold()); + Assertions.assertEquals("2020-01-01 01:01:01", + DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); + Assertions.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); + Assertions.assertEquals("FFFFC000", cell2.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FFC0504D", cell2.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell2.getCellStyle().getFont().getBold()); XSSFCell cell3 = row.getCell(3); - Assert.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); - Assert.assertEquals(0, cell3.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF0000", cell3.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FFEEECE1", cell3.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell3.getCellStyle().getFont().getBold()); + Assertions.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); + Assertions.assertEquals(0, cell3.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF0000", cell3.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FFEEECE1", cell3.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell3.getCellStyle().getFont().getBold()); XSSFCell cell4 = row.getCell(4); - Assert.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); - Assert.assertEquals(0, cell4.getCellStyle().getDataFormat()); - Assert.assertEquals("FFC00000", cell4.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF000000", cell4.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertFalse(cell4.getCellStyle().getFont().getBold()); + Assertions.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); + Assertions.assertEquals(0, cell4.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFC00000", cell4.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF000000", cell4.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertFalse(cell4.getCellStyle().getFont().getBold()); XSSFCell cell5 = row.getCell(5); - Assert.assertEquals("空", cell5.getStringCellValue()); - Assert.assertEquals(0, cell5.getCellStyle().getDataFormat()); - Assert.assertEquals("FFF79646", cell5.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF8064A2", cell5.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertFalse(cell5.getCellStyle().getFont().getBold()); + Assertions.assertEquals("空", cell5.getStringCellValue()); + Assertions.assertEquals(0, cell5.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFF79646", cell5.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF8064A2", cell5.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertFalse(cell5.getCellStyle().getFont().getBold()); } @Test @@ -117,51 +118,53 @@ public class FillStyleDataTest { private void t02Fill03check(HSSFWorkbook workbook, HSSFRow row) { HSSFCell cell0 = row.getCell(0); - Assert.assertEquals("张三", cell0.getStringCellValue()); - Assert.assertEquals(49, cell0.getCellStyle().getDataFormat()); - Assert.assertEquals("0:8080:0", cell0.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("8080:0:8080", cell0.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("张三", cell0.getStringCellValue()); + Assertions.assertEquals(49, cell0.getCellStyle().getDataFormat()); + Assertions.assertEquals("0:8080:0", cell0.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("8080:0:8080", cell0.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell0.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell0.getCellStyle().getFont(workbook).getBold()); HSSFCell cell1 = row.getCell(1); - Assert.assertEquals(5.2, cell1.getNumericCellValue(), 1); - Assert.assertEquals(0, cell1.getCellStyle().getDataFormat()); - Assert.assertEquals("9999:CCCC:0", cell1.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("0:8080:8080", cell1.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals(5.2, cell1.getNumericCellValue(), 1); + Assertions.assertEquals(0, cell1.getCellStyle().getDataFormat()); + Assertions.assertEquals("9999:CCCC:0", cell1.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("0:8080:8080", cell1.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertFalse(cell1.getCellStyle().getFont(workbook).getBold()); + Assertions.assertFalse(cell1.getCellStyle().getFont(workbook).getBold()); HSSFCell cell2 = row.getCell(2); - Assert.assertEquals("2020-01-01 01:01:01", DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); - Assert.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); - Assert.assertEquals("FFFF:CCCC:0", cell2.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("8080:0:0", cell2.getCellStyle().getFont(workbook).getHSSFColor(workbook).getHexString()); - Assert.assertTrue(cell2.getCellStyle().getFont(workbook).getBold()); + Assertions.assertEquals("2020-01-01 01:01:01", + DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); + Assertions.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); + Assertions.assertEquals("FFFF:CCCC:0", cell2.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("8080:0:0", cell2.getCellStyle().getFont(workbook).getHSSFColor(workbook) + .getHexString()); + Assertions.assertTrue(cell2.getCellStyle().getFont(workbook).getBold()); HSSFCell cell3 = row.getCell(3); - Assert.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); - Assert.assertEquals(0, cell3.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF:0:0", cell3.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("FFFF:FFFF:9999", cell3.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); + Assertions.assertEquals(0, cell3.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF:0:0", cell3.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("FFFF:FFFF:9999", cell3.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell3.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell3.getCellStyle().getFont(workbook).getBold()); HSSFCell cell4 = row.getCell(4); - Assert.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); - Assert.assertEquals(0, cell4.getCellStyle().getDataFormat()); - Assert.assertEquals("9999:3333:0", cell4.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("3333:3333:3333", cell4.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); + Assertions.assertEquals(0, cell4.getCellStyle().getDataFormat()); + Assertions.assertEquals("9999:3333:0", cell4.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("3333:3333:3333", cell4.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertFalse(cell4.getCellStyle().getFont(workbook).getBold()); + Assertions.assertFalse(cell4.getCellStyle().getFont(workbook).getBold()); HSSFCell cell5 = row.getCell(5); - Assert.assertEquals("空", cell5.getStringCellValue()); - Assert.assertEquals(0, cell5.getCellStyle().getDataFormat()); - Assert.assertEquals("9999:3333:0", cell5.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("CCCC:9999:FFFF", cell5.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("空", cell5.getStringCellValue()); + Assertions.assertEquals(0, cell5.getCellStyle().getDataFormat()); + Assertions.assertEquals("9999:3333:0", cell5.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("CCCC:9999:FFFF", cell5.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertFalse(cell5.getCellStyle().getFont(workbook).getBold()); + Assertions.assertFalse(cell5.getCellStyle().getFont(workbook).getBold()); } private void fill(File file, File template) throws Exception { @@ -179,46 +182,47 @@ public class FillStyleDataTest { private void t11FillStyleHandler07check(XSSFRow row) { XSSFCell cell0 = row.getCell(0); - Assert.assertEquals("张三", cell0.getStringCellValue()); - Assert.assertEquals(49, cell0.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFFFF00", cell0.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF808000", cell0.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell0.getCellStyle().getFont().getBold()); + Assertions.assertEquals("张三", cell0.getStringCellValue()); + Assertions.assertEquals(49, cell0.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFFFF00", cell0.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF808000", cell0.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell0.getCellStyle().getFont().getBold()); XSSFCell cell1 = row.getCell(1); - Assert.assertEquals(5.2, cell1.getNumericCellValue(), 1); - Assert.assertEquals(0, cell1.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF0000", cell1.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF800000", cell1.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell1.getCellStyle().getFont().getBold()); + Assertions.assertEquals(5.2, cell1.getNumericCellValue(), 1); + Assertions.assertEquals(0, cell1.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF0000", cell1.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF800000", cell1.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell1.getCellStyle().getFont().getBold()); XSSFCell cell2 = row.getCell(2); - Assert.assertEquals("2020-01-01 01:01:01", DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); - Assert.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); - Assert.assertEquals("FF008000", cell2.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF003300", cell2.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell2.getCellStyle().getFont().getBold()); + Assertions.assertEquals("2020-01-01 01:01:01", + DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); + Assertions.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); + Assertions.assertEquals("FF008000", cell2.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF003300", cell2.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell2.getCellStyle().getFont().getBold()); XSSFCell cell3 = row.getCell(3); - Assert.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); - Assert.assertEquals(0, cell3.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF0000", cell3.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FFEEECE1", cell3.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertTrue(cell3.getCellStyle().getFont().getBold()); + Assertions.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); + Assertions.assertEquals(0, cell3.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF0000", cell3.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FFEEECE1", cell3.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertTrue(cell3.getCellStyle().getFont().getBold()); XSSFCell cell4 = row.getCell(4); - Assert.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); - Assert.assertEquals(0, cell4.getCellStyle().getDataFormat()); - Assert.assertEquals("FFC00000", cell4.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF000000", cell4.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertFalse(cell4.getCellStyle().getFont().getBold()); + Assertions.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); + Assertions.assertEquals(0, cell4.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFC00000", cell4.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF000000", cell4.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertFalse(cell4.getCellStyle().getFont().getBold()); XSSFCell cell5 = row.getCell(5); - Assert.assertEquals("空", cell5.getStringCellValue()); - Assert.assertEquals(0, cell5.getCellStyle().getDataFormat()); - Assert.assertEquals("FFF79646", cell5.getCellStyle().getFillForegroundColorColor().getARGBHex()); - Assert.assertEquals("FF8064A2", cell5.getCellStyle().getFont().getXSSFColor().getARGBHex()); - Assert.assertFalse(cell5.getCellStyle().getFont().getBold()); + Assertions.assertEquals("空", cell5.getStringCellValue()); + Assertions.assertEquals(0, cell5.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFF79646", cell5.getCellStyle().getFillForegroundColorColor().getARGBHex()); + Assertions.assertEquals("FF8064A2", cell5.getCellStyle().getFont().getXSSFColor().getARGBHex()); + Assertions.assertFalse(cell5.getCellStyle().getFont().getBold()); } @Test @@ -232,51 +236,53 @@ public class FillStyleDataTest { private void t12FillStyleHandler03check(HSSFWorkbook workbook, HSSFRow row) { HSSFCell cell0 = row.getCell(0); - Assert.assertEquals("张三", cell0.getStringCellValue()); - Assert.assertEquals(49, cell0.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF:FFFF:0", cell0.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("8080:8080:0", cell0.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("张三", cell0.getStringCellValue()); + Assertions.assertEquals(49, cell0.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF:FFFF:0", cell0.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("8080:8080:0", cell0.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell0.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell0.getCellStyle().getFont(workbook).getBold()); HSSFCell cell1 = row.getCell(1); - Assert.assertEquals(5.2, cell1.getNumericCellValue(), 1); - Assert.assertEquals(0, cell1.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF:0:0", cell1.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("8080:0:0", cell1.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals(5.2, cell1.getNumericCellValue(), 1); + Assertions.assertEquals(0, cell1.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF:0:0", cell1.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("8080:0:0", cell1.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell1.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell1.getCellStyle().getFont(workbook).getBold()); HSSFCell cell2 = row.getCell(2); - Assert.assertEquals("2020-01-01 01:01:01", DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); - Assert.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); - Assert.assertEquals("0:8080:0", cell2.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("0:3333:0", cell2.getCellStyle().getFont(workbook).getHSSFColor(workbook).getHexString()); - Assert.assertTrue(cell2.getCellStyle().getFont(workbook).getBold()); + Assertions.assertEquals("2020-01-01 01:01:01", + DateUtils.format(cell2.getDateCellValue(), "yyyy-MM-dd HH:mm:ss")); + Assertions.assertEquals("yyyy-MM-dd HH:mm:ss", cell2.getCellStyle().getDataFormatString()); + Assertions.assertEquals("0:8080:0", cell2.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("0:3333:0", cell2.getCellStyle().getFont(workbook).getHSSFColor(workbook) + .getHexString()); + Assertions.assertTrue(cell2.getCellStyle().getFont(workbook).getBold()); HSSFCell cell3 = row.getCell(3); - Assert.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); - Assert.assertEquals(0, cell3.getCellStyle().getDataFormat()); - Assert.assertEquals("FFFF:0:0", cell3.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("FFFF:FFFF:9999", cell3.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("张三今年5.2岁了", cell3.getStringCellValue()); + Assertions.assertEquals(0, cell3.getCellStyle().getDataFormat()); + Assertions.assertEquals("FFFF:0:0", cell3.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("FFFF:FFFF:9999", cell3.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertTrue(cell3.getCellStyle().getFont(workbook).getBold()); + Assertions.assertTrue(cell3.getCellStyle().getFont(workbook).getBold()); HSSFCell cell4 = row.getCell(4); - Assert.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); - Assert.assertEquals(0, cell4.getCellStyle().getDataFormat()); - Assert.assertEquals("9999:3333:0", cell4.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("3333:3333:3333", cell4.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("{.name}忽略,张三", cell4.getStringCellValue()); + Assertions.assertEquals(0, cell4.getCellStyle().getDataFormat()); + Assertions.assertEquals("9999:3333:0", cell4.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("3333:3333:3333", cell4.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertFalse(cell4.getCellStyle().getFont(workbook).getBold()); + Assertions.assertFalse(cell4.getCellStyle().getFont(workbook).getBold()); HSSFCell cell5 = row.getCell(5); - Assert.assertEquals("空", cell5.getStringCellValue()); - Assert.assertEquals(0, cell5.getCellStyle().getDataFormat()); - Assert.assertEquals("9999:3333:0", cell5.getCellStyle().getFillForegroundColorColor().getHexString()); - Assert.assertEquals("CCCC:9999:FFFF", cell5.getCellStyle().getFont(workbook).getHSSFColor(workbook) + Assertions.assertEquals("空", cell5.getStringCellValue()); + Assertions.assertEquals(0, cell5.getCellStyle().getDataFormat()); + Assertions.assertEquals("9999:3333:0", cell5.getCellStyle().getFillForegroundColorColor().getHexString()); + Assertions.assertEquals("CCCC:9999:FFFF", cell5.getCellStyle().getFont(workbook).getHSSFColor(workbook) .getHexString()); - Assert.assertFalse(cell5.getCellStyle().getFont(workbook).getBold()); + Assertions.assertFalse(cell5.getCellStyle().getFont(workbook).getBold()); } private void fillStyleHandler(File file, File template) throws Exception { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandler.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandler.java index a6f07014..ba16e61b 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandler.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandler.java @@ -14,7 +14,7 @@ import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; -import org.junit.Assert; +import org.junit.jupiter.api.Assertions; /** * @author JiaJu Zhuang @@ -38,18 +38,18 @@ public class WriteHandler implements WorkbookWriteHandler, SheetWriteHandler, Ro public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) { if (isHead) { - Assert.assertEquals(0L, beforeCellCreate); - Assert.assertEquals(0L, afterCellCreate); - Assert.assertEquals(0L, afterCellDataConverted); - Assert.assertEquals(0L, afterCellDispose); - Assert.assertEquals(1L, beforeRowCreate); - Assert.assertEquals(1L, afterRowCreate); - Assert.assertEquals(0L, afterRowDispose); - Assert.assertEquals(1L, beforeSheetCreate); - Assert.assertEquals(1L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(0L, beforeCellCreate); + Assertions.assertEquals(0L, afterCellCreate); + Assertions.assertEquals(0L, afterCellDataConverted); + Assertions.assertEquals(0L, afterCellDispose); + Assertions.assertEquals(1L, beforeRowCreate); + Assertions.assertEquals(1L, afterRowCreate); + Assertions.assertEquals(0L, afterRowDispose); + Assertions.assertEquals(1L, beforeSheetCreate); + Assertions.assertEquals(1L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); beforeCellCreate++; } @@ -59,18 +59,18 @@ public class WriteHandler implements WorkbookWriteHandler, SheetWriteHandler, Ro public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { if (isHead) { - Assert.assertEquals(1L, beforeCellCreate); - Assert.assertEquals(0L, afterCellCreate); - Assert.assertEquals(0L, afterCellDataConverted); - Assert.assertEquals(0L, afterCellDispose); - Assert.assertEquals(1L, beforeRowCreate); - Assert.assertEquals(1L, afterRowCreate); - Assert.assertEquals(0L, afterRowDispose); - Assert.assertEquals(1L, beforeSheetCreate); - Assert.assertEquals(1L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(1L, beforeCellCreate); + Assertions.assertEquals(0L, afterCellCreate); + Assertions.assertEquals(0L, afterCellDataConverted); + Assertions.assertEquals(0L, afterCellDispose); + Assertions.assertEquals(1L, beforeRowCreate); + Assertions.assertEquals(1L, afterRowCreate); + Assertions.assertEquals(0L, afterRowDispose); + Assertions.assertEquals(1L, beforeSheetCreate); + Assertions.assertEquals(1L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); afterCellCreate++; } } @@ -78,18 +78,18 @@ public class WriteHandler implements WorkbookWriteHandler, SheetWriteHandler, Ro @Override public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, WriteCellData cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { - Assert.assertEquals(1L, beforeCellCreate); - Assert.assertEquals(1L, afterCellCreate); - Assert.assertEquals(0L, afterCellDataConverted); - Assert.assertEquals(1, afterCellDispose); - Assert.assertEquals(1L, beforeRowCreate); - Assert.assertEquals(1L, afterRowCreate); - Assert.assertEquals(1L, afterRowDispose); - Assert.assertEquals(1L, beforeSheetCreate); - Assert.assertEquals(1L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(1L, beforeCellCreate); + Assertions.assertEquals(1L, afterCellCreate); + Assertions.assertEquals(0L, afterCellDataConverted); + Assertions.assertEquals(1, afterCellDispose); + Assertions.assertEquals(1L, beforeRowCreate); + Assertions.assertEquals(1L, afterRowCreate); + Assertions.assertEquals(1L, afterRowDispose); + Assertions.assertEquals(1L, beforeSheetCreate); + Assertions.assertEquals(1L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); afterCellDataConverted++; } @@ -97,18 +97,18 @@ public class WriteHandler implements WorkbookWriteHandler, SheetWriteHandler, Ro public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { if (isHead) { - Assert.assertEquals(1L, beforeCellCreate); - Assert.assertEquals(1L, afterCellCreate); - Assert.assertEquals(0L, afterCellDataConverted); - Assert.assertEquals(0L, afterCellDispose); - Assert.assertEquals(1L, beforeRowCreate); - Assert.assertEquals(1L, afterRowCreate); - Assert.assertEquals(0L, afterRowDispose); - Assert.assertEquals(1L, beforeSheetCreate); - Assert.assertEquals(1L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(1L, beforeCellCreate); + Assertions.assertEquals(1L, afterCellCreate); + Assertions.assertEquals(0L, afterCellDataConverted); + Assertions.assertEquals(0L, afterCellDispose); + Assertions.assertEquals(1L, beforeRowCreate); + Assertions.assertEquals(1L, afterRowCreate); + Assertions.assertEquals(0L, afterRowDispose); + Assertions.assertEquals(1L, beforeSheetCreate); + Assertions.assertEquals(1L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); afterCellDispose++; } } @@ -117,18 +117,18 @@ public class WriteHandler implements WorkbookWriteHandler, SheetWriteHandler, Ro public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer rowIndex, Integer relativeRowIndex, Boolean isHead) { if (isHead) { - Assert.assertEquals(0L, beforeCellCreate); - Assert.assertEquals(0L, afterCellCreate); - Assert.assertEquals(0L, afterCellDataConverted); - Assert.assertEquals(0L, afterCellDispose); - Assert.assertEquals(0L, beforeRowCreate); - Assert.assertEquals(0L, afterRowCreate); - Assert.assertEquals(0L, afterRowDispose); - Assert.assertEquals(1L, beforeSheetCreate); - Assert.assertEquals(1L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(0L, beforeCellCreate); + Assertions.assertEquals(0L, afterCellCreate); + Assertions.assertEquals(0L, afterCellDataConverted); + Assertions.assertEquals(0L, afterCellDispose); + Assertions.assertEquals(0L, beforeRowCreate); + Assertions.assertEquals(0L, afterRowCreate); + Assertions.assertEquals(0L, afterRowDispose); + Assertions.assertEquals(1L, beforeSheetCreate); + Assertions.assertEquals(1L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); beforeRowCreate++; } @@ -138,18 +138,18 @@ public class WriteHandler implements WorkbookWriteHandler, SheetWriteHandler, Ro public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) { if (isHead) { - Assert.assertEquals(0L, beforeCellCreate); - Assert.assertEquals(0L, afterCellCreate); - Assert.assertEquals(0L, afterCellDataConverted); - Assert.assertEquals(0L, afterCellDispose); - Assert.assertEquals(1L, beforeRowCreate); - Assert.assertEquals(0L, afterRowCreate); - Assert.assertEquals(0L, afterRowDispose); - Assert.assertEquals(1L, beforeSheetCreate); - Assert.assertEquals(1L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(0L, beforeCellCreate); + Assertions.assertEquals(0L, afterCellCreate); + Assertions.assertEquals(0L, afterCellDataConverted); + Assertions.assertEquals(0L, afterCellDispose); + Assertions.assertEquals(1L, beforeRowCreate); + Assertions.assertEquals(0L, afterRowCreate); + Assertions.assertEquals(0L, afterRowDispose); + Assertions.assertEquals(1L, beforeSheetCreate); + Assertions.assertEquals(1L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); afterRowCreate++; } } @@ -158,120 +158,120 @@ public class WriteHandler implements WorkbookWriteHandler, SheetWriteHandler, Ro public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) { if (isHead) { - Assert.assertEquals(1L, beforeCellCreate); - Assert.assertEquals(1L, afterCellCreate); - Assert.assertEquals(0L, afterCellDataConverted); - Assert.assertEquals(1L, afterCellDispose); - Assert.assertEquals(1L, beforeRowCreate); - Assert.assertEquals(1L, afterRowCreate); - Assert.assertEquals(0L, afterRowDispose); - Assert.assertEquals(1L, beforeSheetCreate); - Assert.assertEquals(1L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(1L, beforeCellCreate); + Assertions.assertEquals(1L, afterCellCreate); + Assertions.assertEquals(0L, afterCellDataConverted); + Assertions.assertEquals(1L, afterCellDispose); + Assertions.assertEquals(1L, beforeRowCreate); + Assertions.assertEquals(1L, afterRowCreate); + Assertions.assertEquals(0L, afterRowDispose); + Assertions.assertEquals(1L, beforeSheetCreate); + Assertions.assertEquals(1L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); afterRowDispose++; } } @Override public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { - Assert.assertEquals(0L, beforeCellCreate); - Assert.assertEquals(0L, afterCellCreate); - Assert.assertEquals(0L, afterCellDataConverted); - Assert.assertEquals(0L, afterCellDispose); - Assert.assertEquals(0L, beforeRowCreate); - Assert.assertEquals(0L, afterRowCreate); - Assert.assertEquals(0L, afterRowDispose); - Assert.assertEquals(0L, beforeSheetCreate); - Assert.assertEquals(0L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(0L, beforeCellCreate); + Assertions.assertEquals(0L, afterCellCreate); + Assertions.assertEquals(0L, afterCellDataConverted); + Assertions.assertEquals(0L, afterCellDispose); + Assertions.assertEquals(0L, beforeRowCreate); + Assertions.assertEquals(0L, afterRowCreate); + Assertions.assertEquals(0L, afterRowDispose); + Assertions.assertEquals(0L, beforeSheetCreate); + Assertions.assertEquals(0L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); beforeSheetCreate++; } @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { - Assert.assertEquals(0L, beforeCellCreate); - Assert.assertEquals(0L, afterCellCreate); - Assert.assertEquals(0L, afterCellDataConverted); - Assert.assertEquals(0L, afterCellDispose); - Assert.assertEquals(0L, beforeRowCreate); - Assert.assertEquals(0L, afterRowCreate); - Assert.assertEquals(0L, afterRowDispose); - Assert.assertEquals(1L, beforeSheetCreate); - Assert.assertEquals(0L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(0L, beforeCellCreate); + Assertions.assertEquals(0L, afterCellCreate); + Assertions.assertEquals(0L, afterCellDataConverted); + Assertions.assertEquals(0L, afterCellDispose); + Assertions.assertEquals(0L, beforeRowCreate); + Assertions.assertEquals(0L, afterRowCreate); + Assertions.assertEquals(0L, afterRowDispose); + Assertions.assertEquals(1L, beforeSheetCreate); + Assertions.assertEquals(0L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); afterSheetCreate++; } @Override public void beforeWorkbookCreate() { - Assert.assertEquals(0L, beforeCellCreate); - Assert.assertEquals(0L, afterCellCreate); - Assert.assertEquals(0L, afterCellDataConverted); - Assert.assertEquals(0L, afterCellDispose); - Assert.assertEquals(0L, beforeRowCreate); - Assert.assertEquals(0L, afterRowCreate); - Assert.assertEquals(0L, afterRowDispose); - Assert.assertEquals(0L, beforeSheetCreate); - Assert.assertEquals(0L, afterSheetCreate); - Assert.assertEquals(0L, beforeWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(0L, beforeCellCreate); + Assertions.assertEquals(0L, afterCellCreate); + Assertions.assertEquals(0L, afterCellDataConverted); + Assertions.assertEquals(0L, afterCellDispose); + Assertions.assertEquals(0L, beforeRowCreate); + Assertions.assertEquals(0L, afterRowCreate); + Assertions.assertEquals(0L, afterRowDispose); + Assertions.assertEquals(0L, beforeSheetCreate); + Assertions.assertEquals(0L, afterSheetCreate); + Assertions.assertEquals(0L, beforeWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); beforeWorkbookCreate++; } @Override public void afterWorkbookCreate(WriteWorkbookHolder writeWorkbookHolder) { - Assert.assertEquals(0L, beforeCellCreate); - Assert.assertEquals(0L, afterCellCreate); - Assert.assertEquals(0L, afterCellDataConverted); - Assert.assertEquals(0L, afterCellDispose); - Assert.assertEquals(0L, beforeRowCreate); - Assert.assertEquals(0L, afterRowCreate); - Assert.assertEquals(0L, afterRowDispose); - Assert.assertEquals(0L, beforeSheetCreate); - Assert.assertEquals(0L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(0L, beforeCellCreate); + Assertions.assertEquals(0L, afterCellCreate); + Assertions.assertEquals(0L, afterCellDataConverted); + Assertions.assertEquals(0L, afterCellDispose); + Assertions.assertEquals(0L, beforeRowCreate); + Assertions.assertEquals(0L, afterRowCreate); + Assertions.assertEquals(0L, afterRowDispose); + Assertions.assertEquals(0L, beforeSheetCreate); + Assertions.assertEquals(0L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); afterWorkbookCreate++; } @Override public void afterWorkbookDispose(WriteWorkbookHolder writeWorkbookHolder) { - Assert.assertEquals(1L, beforeCellCreate); - Assert.assertEquals(1L, afterCellCreate); - Assert.assertEquals(1L, afterCellDataConverted); - Assert.assertEquals(1L, afterCellDispose); - Assert.assertEquals(1L, beforeRowCreate); - Assert.assertEquals(1L, afterRowCreate); - Assert.assertEquals(1L, afterRowDispose); - Assert.assertEquals(1L, beforeSheetCreate); - Assert.assertEquals(1L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookCreate); - Assert.assertEquals(0L, afterWorkbookDispose); + Assertions.assertEquals(1L, beforeCellCreate); + Assertions.assertEquals(1L, afterCellCreate); + Assertions.assertEquals(1L, afterCellDataConverted); + Assertions.assertEquals(1L, afterCellDispose); + Assertions.assertEquals(1L, beforeRowCreate); + Assertions.assertEquals(1L, afterRowCreate); + Assertions.assertEquals(1L, afterRowDispose); + Assertions.assertEquals(1L, beforeSheetCreate); + Assertions.assertEquals(1L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookCreate); + Assertions.assertEquals(0L, afterWorkbookDispose); afterWorkbookDispose++; } public void afterAll() { - Assert.assertEquals(1L, beforeCellCreate); - Assert.assertEquals(1L, afterCellCreate); - Assert.assertEquals(1L, afterCellDataConverted); - Assert.assertEquals(1L, afterCellDispose); - Assert.assertEquals(1L, beforeRowCreate); - Assert.assertEquals(1L, afterRowCreate); - Assert.assertEquals(1L, afterRowDispose); - Assert.assertEquals(1L, beforeSheetCreate); - Assert.assertEquals(1L, afterSheetCreate); - Assert.assertEquals(1L, beforeWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookCreate); - Assert.assertEquals(1L, afterWorkbookDispose); + Assertions.assertEquals(1L, beforeCellCreate); + Assertions.assertEquals(1L, afterCellCreate); + Assertions.assertEquals(1L, afterCellDataConverted); + Assertions.assertEquals(1L, afterCellDispose); + Assertions.assertEquals(1L, beforeRowCreate); + Assertions.assertEquals(1L, afterRowCreate); + Assertions.assertEquals(1L, afterRowDispose); + Assertions.assertEquals(1L, beforeSheetCreate); + Assertions.assertEquals(1L, afterSheetCreate); + Assertions.assertEquals(1L, beforeWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookCreate); + Assertions.assertEquals(1L, afterWorkbookDispose); } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerTest.java index a3354f35..3988e8a0 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerTest.java @@ -7,24 +7,22 @@ import java.util.List; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** - * * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class WriteHandlerTest { private static File file07; private static File file03; private static File fileCsv; - - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("writeHandler07.xlsx"); file03 = TestFileUtil.createNewFile("writeHandler03.xls"); @@ -46,7 +44,6 @@ public class WriteHandlerTest { workbookWrite(fileCsv); } - @Test public void t11SheetWrite07() throws Exception { sheetWrite(file07); @@ -72,7 +69,6 @@ public class WriteHandlerTest { tableWrite(file03); } - @Test public void t23TableWriteCsv() throws Exception { tableWrite(fileCsv); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexDataListener.java index 1eab8585..1b127962 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexDataListener.java @@ -3,14 +3,14 @@ package com.alibaba.easyexcel.test.core.head; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -25,9 +25,9 @@ public class ComplexDataListener extends AnalysisEventListener @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(list.size(), 1); + Assertions.assertEquals(list.size(), 1); ComplexHeadData data = list.get(0); - Assert.assertEquals(data.getString4(), "字符串4"); + Assertions.assertEquals(data.getString4(), "字符串4"); LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadDataTest.java index 07340c3b..a6e2ada2 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadDataTest.java @@ -7,15 +7,15 @@ import java.util.List; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class ComplexHeadDataTest { private static File file07; @@ -25,7 +25,7 @@ public class ComplexHeadDataTest { private static File file03AutomaticMergeHead; private static File fileCsvAutomaticMergeHead; - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("complexHead07.xlsx"); file03 = TestFileUtil.createNewFile("complexHead03.xls"); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataListener.java index 3e0ba094..2cc93a2d 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataListener.java @@ -9,7 +9,7 @@ import com.alibaba.excel.metadata.data.ReadCellData; import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.fastjson2.JSON; -import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,10 +23,10 @@ public class ListHeadDataListener implements ReadListener> @Override public void invokeHead(Map> headMap, AnalysisContext context) { - Assert.assertNotNull(context.readRowHolder().getRowIndex()); + Assertions.assertNotNull(context.readRowHolder().getRowIndex()); headMap.forEach((key, value) -> { - Assert.assertEquals(value.getRowIndex(), context.readRowHolder().getRowIndex()); - Assert.assertEquals(value.getColumnIndex(), key); + Assertions.assertEquals(value.getRowIndex(), context.readRowHolder().getRowIndex()); + Assertions.assertEquals(value.getColumnIndex(), key); }); } @@ -37,12 +37,12 @@ public class ListHeadDataListener implements ReadListener> @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(list.size(), 1); + Assertions.assertEquals(list.size(), 1); Map data = list.get(0); - Assert.assertEquals("字符串0", data.get(0)); - Assert.assertEquals("1", data.get(1)); - Assert.assertEquals("2020-01-01 01:01:01", data.get(2)); - Assert.assertEquals("额外数据", data.get(3)); + Assertions.assertEquals("字符串0", data.get(0)); + Assertions.assertEquals("1", data.get(1)); + Assertions.assertEquals("2020-01-01 01:01:01", data.get(2)); + Assertions.assertEquals("额外数据", data.get(3)); LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataTest.java index 073c0e9c..c1dab546 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataTest.java @@ -9,24 +9,22 @@ import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.util.DateUtils; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** - * * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class ListHeadDataTest { private static File file07; private static File file03; private static File fileCsv; - - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("listHead07.xlsx"); file03 = TestFileUtil.createNewFile("listHead03.xls"); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataListener.java index ae07ab41..3e5df209 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataListener.java @@ -3,14 +3,14 @@ package com.alibaba.easyexcel.test.core.head; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -25,9 +25,9 @@ public class NoHeadDataListener extends AnalysisEventListener { @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(list.size(), 1); + Assertions.assertEquals(list.size(), 1); NoHeadData data = list.get(0); - Assert.assertEquals(data.getString(), "字符串0"); + Assertions.assertEquals(data.getString(), "字符串0"); LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataTest.java index b08e4630..a7568602 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataTest.java @@ -7,22 +7,22 @@ import java.util.List; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class NoHeadDataTest { private static File file07; private static File file03; private static File fileCsv; - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("noHead07.xlsx"); file03 = TestFileUtil.createNewFile("noHead03.xls"); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataListener.java index fd056a5c..7736de30 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataListener.java @@ -5,7 +5,7 @@ import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.fastjson2.JSON; -import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,9 +31,9 @@ public class LargeDataListener extends AnalysisEventListener { public void doAfterAllAnalysed(AnalysisContext context) { LOGGER.info("Large row count:{}", count); if (context.readWorkbookHolder().getExcelType() != ExcelTypeEnum.CSV) { - Assert.assertEquals(count, 464509); + Assertions.assertEquals(count, 464509); } else { - Assert.assertEquals(count, 499999); + Assertions.assertEquals(count, 499999); } } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java index 8862fe18..2eecca2a 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java @@ -2,35 +2,30 @@ package com.alibaba.easyexcel.test.core.large; import java.io.File; import java.io.FileOutputStream; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; -import com.alibaba.excel.cache.Ehcache; -import com.alibaba.excel.cache.ReadCache; -import com.alibaba.excel.util.FileUtils; import com.alibaba.excel.write.metadata.WriteSheet; -import org.apache.poi.util.TempFile; import org.apache.poi.xssf.streaming.SXSSFCell; import org.apache.poi.xssf.streaming.SXSSFRow; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class LargeDataTest { private static final Logger LOGGER = LoggerFactory.getLogger(LargeDataTest.class); private static File fileFill07; @@ -42,7 +37,7 @@ public class LargeDataTest { private int i = 0; - @BeforeClass + @BeforeAll public static void init() { fileFill07 = TestFileUtil.createNewFile("largefill07.xlsx"); fileWrite07 = TestFileUtil.createNewFile("large" + File.separator + "fileWrite07.xlsx"); @@ -60,7 +55,6 @@ public class LargeDataTest { LOGGER.info("Large data total time spent:{}", System.currentTimeMillis() - start); } - @Test public void t02Fill() { try (ExcelWriter excelWriter = EasyExcel.write(fileFill07).withTemplate(template07).build()) { @@ -131,7 +125,7 @@ public class LargeDataTest { long costPoi = System.currentTimeMillis() - start; LOGGER.info("poi write cost:{}", System.currentTimeMillis() - start); LOGGER.info("{} vs {}", cost, costPoi); - Assert.assertTrue(costPoi * 2 > cost); + Assertions.assertTrue(costPoi * 2 > cost); } private List data() { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsDataTest.java index b87decde..0ac27617 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsDataTest.java @@ -8,22 +8,22 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.read.metadata.ReadSheet; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class MultipleSheetsDataTest { private static File file07; private static File file03; - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.readFile("multiplesheets" + File.separator + "multiplesheets.xlsx"); file03 = TestFileUtil.readFile("multiplesheets" + File.separator + "multiplesheets.xls"); @@ -56,7 +56,7 @@ public class MultipleSheetsDataTest { int count = 1; for (ReadSheet readSheet : sheets) { excelReader.read(readSheet); - Assert.assertEquals(multipleSheetsListener.getList().size(), count); + Assertions.assertEquals(multipleSheetsListener.getList().size(), count); count++; } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsListener.java index c078f20e..b30484aa 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsListener.java @@ -3,14 +3,14 @@ package com.alibaba.easyexcel.test.core.multiplesheets; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -26,7 +26,7 @@ public class MultipleSheetsListener extends AnalysisEventListener> result = EasyExcel.read(file).headRowNumber(0).sheet().doReadSync(); - Assert.assertEquals(10, result.size()); + Assertions.assertEquals(10, result.size()); Map data10 = result.get(9); - Assert.assertEquals("string19", data10.get(0)); - Assert.assertEquals("109", data10.get(1)); - Assert.assertEquals("2020-01-01 01:01:01", data10.get(2)); + Assertions.assertEquals("string19", data10.get(0)); + Assertions.assertEquals("109", data10.get(1)); + Assertions.assertEquals("2020-01-01 01:01:01", data10.get(2)); List> actualDataList = EasyExcel.read(file) .headRowNumber(0) @@ -75,16 +75,16 @@ public class NoModelDataTest { .sheet() .doReadSync(); log.info("actualDataList:{}", JSON.toJSONString(actualDataList)); - Assert.assertEquals(10, actualDataList.size()); + Assertions.assertEquals(10, actualDataList.size()); Map actualData10 = actualDataList.get(9); - Assert.assertEquals("string19", actualData10.get(0)); + Assertions.assertEquals("string19", actualData10.get(0)); if (isCsv) { // CSV only string type - Assert.assertEquals("109", actualData10.get(1)); - Assert.assertEquals("2020-01-01 01:01:01", actualData10.get(2)); + Assertions.assertEquals("109", actualData10.get(1)); + Assertions.assertEquals("2020-01-01 01:01:01", actualData10.get(2)); } else { - Assert.assertEquals(0, new BigDecimal("109").compareTo((BigDecimal)actualData10.get(1))); - Assert.assertEquals(LocalDateTime.of(2020, 1, 1, 1, 1, 1), actualData10.get(2)); + Assertions.assertEquals(0, new BigDecimal("109").compareTo((BigDecimal)actualData10.get(1))); + Assertions.assertEquals(LocalDateTime.of(2020, 1, 1, 1, 1, 1), actualData10.get(2)); } List>> readCellDataList = EasyExcel.read(file) @@ -93,25 +93,25 @@ public class NoModelDataTest { .sheet() .doReadSync(); log.info("readCellDataList:{}", JSON.toJSONString(readCellDataList)); - Assert.assertEquals(10, readCellDataList.size()); + Assertions.assertEquals(10, readCellDataList.size()); Map> readCellData10 = readCellDataList.get(9); - Assert.assertEquals("string19", readCellData10.get(0).getData()); + Assertions.assertEquals("string19", readCellData10.get(0).getData()); if (isCsv) { // CSV only string type - Assert.assertEquals("109", readCellData10.get(1).getData()); - Assert.assertEquals("2020-01-01 01:01:01", readCellData10.get(2).getData()); + Assertions.assertEquals("109", readCellData10.get(1).getData()); + Assertions.assertEquals("2020-01-01 01:01:01", readCellData10.get(2).getData()); } else { - Assert.assertEquals(0, new BigDecimal("109").compareTo((BigDecimal)readCellData10.get(1).getData())); - Assert.assertEquals(LocalDateTime.of(2020, 1, 1, 1, 1, 1), readCellData10.get(2).getData()); + Assertions.assertEquals(0, new BigDecimal("109").compareTo((BigDecimal)readCellData10.get(1).getData())); + Assertions.assertEquals(LocalDateTime.of(2020, 1, 1, 1, 1, 1), readCellData10.get(2).getData()); } EasyExcel.write(fileRepeat).sheet().doWrite(result); result = EasyExcel.read(fileRepeat).headRowNumber(0).sheet().doReadSync(); - Assert.assertEquals(10, result.size()); + Assertions.assertEquals(10, result.size()); data10 = result.get(9); - Assert.assertEquals("string19", data10.get(0)); - Assert.assertEquals("109", data10.get(1)); - Assert.assertEquals("2020-01-01 01:01:01", data10.get(2)); + Assertions.assertEquals("string19", data10.get(0)); + Assertions.assertEquals("109", data10.get(1)); + Assertions.assertEquals("2020-01-01 01:01:01", data10.get(2)); } private List> data() throws Exception { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataListener.java index 8c5e93c7..f9dd43e6 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataListener.java @@ -9,7 +9,7 @@ import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; import lombok.extern.slf4j.Slf4j; -import org.junit.Assert; +import org.junit.jupiter.api.Assertions; /** * @author Jiaju Zhuang @@ -21,12 +21,12 @@ public class UnCamelDataListener extends AnalysisEventListener { @Override public void invokeHeadMap(Map headMap, AnalysisContext context) { log.debug("Head is:{}", JSON.toJSONString(headMap)); - Assert.assertEquals(headMap.get(0), "string1"); - Assert.assertEquals(headMap.get(1), "string2"); - Assert.assertEquals(headMap.get(2), "STring3"); - Assert.assertEquals(headMap.get(3), "STring4"); - Assert.assertEquals(headMap.get(4), "STRING5"); - Assert.assertEquals(headMap.get(5), "STRing6"); + Assertions.assertEquals(headMap.get(0), "string1"); + Assertions.assertEquals(headMap.get(1), "string2"); + Assertions.assertEquals(headMap.get(2), "STring3"); + Assertions.assertEquals(headMap.get(3), "STring4"); + Assertions.assertEquals(headMap.get(4), "STRING5"); + Assertions.assertEquals(headMap.get(5), "STRing6"); } @@ -37,14 +37,14 @@ public class UnCamelDataListener extends AnalysisEventListener { @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(list.size(), 10); + Assertions.assertEquals(list.size(), 10); UnCamelData unCamelData = list.get(0); - Assert.assertEquals(unCamelData.getString1(), "string1"); - Assert.assertEquals(unCamelData.getString2(), "string2"); - Assert.assertEquals(unCamelData.getSTring3(), "string3"); - Assert.assertEquals(unCamelData.getSTring4(), "string4"); - Assert.assertEquals(unCamelData.getSTRING5(), "string5"); - Assert.assertEquals(unCamelData.getSTRing6(), "string6"); + Assertions.assertEquals(unCamelData.getString1(), "string1"); + Assertions.assertEquals(unCamelData.getString2(), "string2"); + Assertions.assertEquals(unCamelData.getSTring3(), "string3"); + Assertions.assertEquals(unCamelData.getSTring4(), "string4"); + Assertions.assertEquals(unCamelData.getSTRING5(), "string5"); + Assertions.assertEquals(unCamelData.getSTRing6(), "string6"); log.debug("First row:{}", JSON.toJSONString(list.get(0))); } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataTest.java index e8696c5a..f60e3636 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataTest.java @@ -7,23 +7,22 @@ import java.util.List; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class UnCamelDataTest { private static File file07; private static File file03; private static File fileCsv; - - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("unCame07.xlsx"); file03 = TestFileUtil.createNewFile("unCame03.xls"); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataListener.java index f465e92c..7a3a9cb9 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataListener.java @@ -3,14 +3,14 @@ package com.alibaba.easyexcel.test.core.parameter; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -25,10 +25,10 @@ public class ParameterDataListener extends AnalysisEventListener @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(list.size(), 10); - Assert.assertEquals(list.get(0).getName(), "姓名0"); - Assert.assertEquals((int)(context.readSheetHolder().getSheetNo()), 0); - Assert.assertEquals( + Assertions.assertEquals(list.size(), 10); + Assertions.assertEquals(list.get(0).getName(), "姓名0"); + Assertions.assertEquals((int)(context.readSheetHolder().getSheetNo()), 0); + Assertions.assertEquals( context.readSheetHolder().getExcelReadHeadProperty().getHeadMap().get(0).getHeadNameList().get(0), "姓名"); LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataTest.java index 4e0f2a09..ee5e294b 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataTest.java @@ -16,21 +16,21 @@ import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.WriteTable; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class ParameterDataTest { private static File file07; private static File fileCsv; - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("parameter07.xlsx"); fileCsv = TestFileUtil.createNewFile("parameterCsv.csv"); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataListener.java index 4827f67a..d4a57bcb 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataListener.java @@ -3,15 +3,15 @@ package com.alibaba.easyexcel.test.core.repetition; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.easyexcel.test.core.simple.SimpleDataListener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -26,9 +26,9 @@ public class RepetitionDataListener extends AnalysisEventListener { @Override public void invokeHeadMap(Map headMap, AnalysisContext context) { LOGGER.debug("Head is:{}", JSON.toJSONString(headMap)); - Assert.assertEquals(headMap.get(0), "姓名"); + Assertions.assertEquals(headMap.get(0), "姓名"); } @Override @@ -32,10 +32,10 @@ public class SimpleDataListener extends AnalysisEventListener { @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(list.size(), 10); - Assert.assertEquals(list.get(0).getName(), "姓名0"); - Assert.assertEquals((int)(context.readSheetHolder().getSheetNo()), 0); - Assert.assertEquals( + Assertions.assertEquals(list.size(), 10); + Assertions.assertEquals(list.get(0).getName(), "姓名0"); + Assertions.assertEquals((int)(context.readSheetHolder().getSheetNo()), 0); + Assertions.assertEquals( context.readSheetHolder().getExcelReadHeadProperty().getHeadMap().get(0).getHeadNameList().get(0), "姓名"); LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataSheetNameListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataSheetNameListener.java index 59cfa64f..09d8cbe4 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataSheetNameListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataSheetNameListener.java @@ -3,14 +3,14 @@ package com.alibaba.easyexcel.test.core.simple; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -25,8 +25,8 @@ public class SimpleDataSheetNameListener extends AnalysisEventListener(dataList -> { - Assert.assertEquals(5, dataList.size()); + Assertions.assertEquals(5, dataList.size()); }, 5)) .sheet().doRead(); } @@ -114,9 +113,9 @@ public class SimpleDataTest { private void synchronousRead(File file) { // Synchronous read file List list = EasyExcel.read(file).head(SimpleData.class).sheet().doReadSync(); - Assert.assertEquals(list.size(), 10); - Assert.assertTrue(list.get(0) instanceof SimpleData); - Assert.assertEquals(((SimpleData)list.get(0)).getName(), "姓名0"); + Assertions.assertEquals(list.size(), 10); + Assertions.assertTrue(list.get(0) instanceof SimpleData); + Assertions.assertEquals(((SimpleData)list.get(0)).getName(), "姓名0"); } private List data() { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/skip/SkipDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/skip/SkipDataTest.java index 0d0777e2..07e2415f 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/skip/SkipDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/skip/SkipDataTest.java @@ -14,23 +14,23 @@ import com.alibaba.excel.exception.ExcelGenerateException; import com.alibaba.excel.read.metadata.ReadSheet; import com.alibaba.excel.write.metadata.WriteSheet; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class SkipDataTest { private static File file07; private static File file03; private static File fileCsv; - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("skip.xlsx"); file03 = TestFileUtil.createNewFile("skip.xls"); @@ -49,7 +49,7 @@ public class SkipDataTest { @Test public void t03ReadAndWriteCsv() { - Assert.assertThrows(ExcelGenerateException.class, () -> readAndWrite(fileCsv)); + Assertions.assertThrows(ExcelGenerateException.class, () -> readAndWrite(fileCsv)); } private void readAndWrite(File file) { @@ -65,8 +65,8 @@ public class SkipDataTest { } List list = EasyExcel.read(file, SkipData.class, null).sheet("第二个").doReadSync(); - Assert.assertEquals(1, list.size()); - Assert.assertEquals("name2", list.get(0).getName()); + Assertions.assertEquals(1, list.size()); + Assertions.assertEquals("name2", list.get(0).getName()); SyncReadListener syncReadListener = new SyncReadListener(); try (ExcelReader excelReader = EasyExcel.read(file, SkipData.class, null).registerReadListener(syncReadListener) @@ -75,9 +75,9 @@ public class SkipDataTest { ReadSheet readSheet3 = EasyExcel.readSheet("第四个").build(); excelReader.read(readSheet1, readSheet3); List syncList = syncReadListener.getList(); - Assert.assertEquals(2, syncList.size()); - Assert.assertEquals("name2", ((SkipData)syncList.get(0)).getName()); - Assert.assertEquals("name4", ((SkipData)syncList.get(1)).getName()); + Assertions.assertEquals(2, syncList.size()); + Assertions.assertEquals("name2", ((SkipData)syncList.get(0)).getName()); + Assertions.assertEquals("name4", ((SkipData)syncList.get(1)).getName()); } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataListener.java index 4a9df22f..dae966c1 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataListener.java @@ -3,13 +3,13 @@ package com.alibaba.easyexcel.test.core.sort; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -18,7 +18,6 @@ public class SortDataListener extends AnalysisEventListener { private static final Logger LOGGER = LoggerFactory.getLogger(SortDataListener.class); List list = new ArrayList(); - @Override public void invoke(SortData data, AnalysisContext context) { list.add(data); @@ -26,13 +25,13 @@ public class SortDataListener extends AnalysisEventListener { @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(list.size(), 1); + Assertions.assertEquals(list.size(), 1); SortData sortData = list.get(0); - Assert.assertEquals("column1", sortData.getColumn1()); - Assert.assertEquals("column2", sortData.getColumn2()); - Assert.assertEquals("column3", sortData.getColumn3()); - Assert.assertEquals("column4", sortData.getColumn4()); - Assert.assertEquals("column5", sortData.getColumn5()); - Assert.assertEquals("column6", sortData.getColumn6()); + Assertions.assertEquals("column1", sortData.getColumn1()); + Assertions.assertEquals("column2", sortData.getColumn2()); + Assertions.assertEquals("column3", sortData.getColumn3()); + Assertions.assertEquals("column4", sortData.getColumn4()); + Assertions.assertEquals("column5", sortData.getColumn5()); + Assertions.assertEquals("column6", sortData.getColumn6()); } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataTest.java index f1a2b618..74f34b9b 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataTest.java @@ -9,16 +9,16 @@ import java.util.Map; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class SortDataTest { private static File file07; @@ -28,7 +28,7 @@ public class SortDataTest { private static File sortNoHead03; private static File sortNoHeadCsv; - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("sort.xlsx"); file03 = TestFileUtil.createNewFile("sort.xls"); @@ -71,14 +71,14 @@ public class SortDataTest { private void readAndWrite(File file) { EasyExcel.write(file, SortData.class).sheet().doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); - Assert.assertEquals(1, dataMap.size()); + Assertions.assertEquals(1, dataMap.size()); Map record = dataMap.get(0); - Assert.assertEquals("column1", record.get(0)); - Assert.assertEquals("column2", record.get(1)); - Assert.assertEquals("column3", record.get(2)); - Assert.assertEquals("column4", record.get(3)); - Assert.assertEquals("column5", record.get(4)); - Assert.assertEquals("column6", record.get(5)); + Assertions.assertEquals("column1", record.get(0)); + Assertions.assertEquals("column2", record.get(1)); + Assertions.assertEquals("column3", record.get(2)); + Assertions.assertEquals("column4", record.get(3)); + Assertions.assertEquals("column5", record.get(4)); + Assertions.assertEquals("column6", record.get(5)); EasyExcel.read(file, SortData.class, new SortDataListener()).sheet().doRead(); } @@ -86,14 +86,14 @@ public class SortDataTest { private void readAndWriteNoHead(File file) { EasyExcel.write(file).head(head()).sheet().doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); - Assert.assertEquals(1, dataMap.size()); + Assertions.assertEquals(1, dataMap.size()); Map record = dataMap.get(0); - Assert.assertEquals("column1", record.get(0)); - Assert.assertEquals("column2", record.get(1)); - Assert.assertEquals("column3", record.get(2)); - Assert.assertEquals("column4", record.get(3)); - Assert.assertEquals("column5", record.get(4)); - Assert.assertEquals("column6", record.get(5)); + Assertions.assertEquals("column1", record.get(0)); + Assertions.assertEquals("column2", record.get(1)); + Assertions.assertEquals("column3", record.get(2)); + Assertions.assertEquals("column4", record.get(3)); + Assertions.assertEquals("column5", record.get(4)); + Assertions.assertEquals("column6", record.get(5)); EasyExcel.read(file, SortData.class, new SortDataListener()).sheet().doRead(); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataListener.java index ee16e023..64e7ff8b 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataListener.java @@ -3,15 +3,15 @@ package com.alibaba.easyexcel.test.core.style; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.easyexcel.test.core.simple.SimpleDataListener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -26,9 +26,9 @@ public class StyleDataListener extends AnalysisEventListener { @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(list.size(), 2); - Assert.assertEquals(list.get(0).getString(), "字符串0"); - Assert.assertEquals(list.get(1).getString(), "字符串1"); + Assertions.assertEquals(list.size(), 2); + Assertions.assertEquals(list.get(0).getString(), "字符串0"); + Assertions.assertEquals(list.get(1).getString(), "字符串1"); LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataTest.java index e9323761..989c9c56 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataTest.java @@ -33,16 +33,16 @@ import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class StyleDataTest { private static File file07; @@ -51,7 +51,7 @@ public class StyleDataTest { private static File fileVerticalCellStyleStrategy207; private static File fileLoopMergeStrategy; - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("style07.xlsx"); file03 = TestFileUtil.createNewFile("style03.xls"); @@ -209,30 +209,30 @@ public class StyleDataTest { Workbook workbook = WorkbookFactory.create(file); Sheet sheet = workbook.getSheetAt(0); - Assert.assertEquals(50 * 256, sheet.getColumnWidth(0), 0); + Assertions.assertEquals(50 * 256, sheet.getColumnWidth(0), 0); Row row0 = sheet.getRow(0); - Assert.assertEquals(800, row0.getHeight(), 0); + Assertions.assertEquals(800, row0.getHeight(), 0); Cell cell00 = row0.getCell(0); - Assert.assertArrayEquals(new byte[] {-1, -1, 0}, StyleTestUtils.getFillForegroundColor(cell00)); - Assert.assertArrayEquals(new byte[] {-128, -128, 0}, StyleTestUtils.getFontColor(cell00, workbook)); - Assert.assertEquals(20, StyleTestUtils.getFontHeightInPoints(cell00, workbook)); + Assertions.assertArrayEquals(new byte[] {-1, -1, 0}, StyleTestUtils.getFillForegroundColor(cell00)); + Assertions.assertArrayEquals(new byte[] {-128, -128, 0}, StyleTestUtils.getFontColor(cell00, workbook)); + Assertions.assertEquals(20, StyleTestUtils.getFontHeightInPoints(cell00, workbook)); Cell cell01 = row0.getCell(1); - Assert.assertArrayEquals(new byte[] {-1, -1, 0}, StyleTestUtils.getFillForegroundColor(cell01)); - Assert.assertArrayEquals(new byte[] {-128, -128, 0}, StyleTestUtils.getFontColor(cell01, workbook)); - Assert.assertEquals(20, StyleTestUtils.getFontHeightInPoints(cell01, workbook)); + Assertions.assertArrayEquals(new byte[] {-1, -1, 0}, StyleTestUtils.getFillForegroundColor(cell01)); + Assertions.assertArrayEquals(new byte[] {-128, -128, 0}, StyleTestUtils.getFontColor(cell01, workbook)); + Assertions.assertEquals(20, StyleTestUtils.getFontHeightInPoints(cell01, workbook)); Row row1 = sheet.getRow(1); - Assert.assertEquals(1000, row1.getHeight(), 0); + Assertions.assertEquals(1000, row1.getHeight(), 0); Cell cell10 = row1.getCell(0); - Assert.assertArrayEquals(new byte[] {0, -128, -128}, StyleTestUtils.getFillForegroundColor(cell10)); - Assert.assertArrayEquals(new byte[] {0, 51, 102}, StyleTestUtils.getFontColor(cell10, workbook)); - Assert.assertEquals(30, StyleTestUtils.getFontHeightInPoints(cell10, workbook)); + Assertions.assertArrayEquals(new byte[] {0, -128, -128}, StyleTestUtils.getFillForegroundColor(cell10)); + Assertions.assertArrayEquals(new byte[] {0, 51, 102}, StyleTestUtils.getFontColor(cell10, workbook)); + Assertions.assertEquals(30, StyleTestUtils.getFontHeightInPoints(cell10, workbook)); Cell cell11 = row1.getCell(1); - Assert.assertArrayEquals(new byte[] {0, -128, -128}, StyleTestUtils.getFillForegroundColor(cell11)); - Assert.assertArrayEquals(new byte[] {0, 51, 102}, StyleTestUtils.getFontColor(cell11, workbook)); - Assert.assertEquals(30, StyleTestUtils.getFontHeightInPoints(cell11, workbook)); + Assertions.assertArrayEquals(new byte[] {0, -128, -128}, StyleTestUtils.getFillForegroundColor(cell11)); + Assertions.assertArrayEquals(new byte[] {0, 51, 102}, StyleTestUtils.getFontColor(cell11, workbook)); + Assertions.assertEquals(30, StyleTestUtils.getFontHeightInPoints(cell11, workbook)); } private List data() { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataListener.java index e3b8b3cf..94f526c0 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataListener.java @@ -3,15 +3,15 @@ package com.alibaba.easyexcel.test.core.template; import java.util.ArrayList; import java.util.List; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.easyexcel.test.core.simple.SimpleDataListener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Assertions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ @@ -26,9 +26,9 @@ public class TemplateDataListener extends AnalysisEventListener { @Override public void doAfterAllAnalysed(AnalysisContext context) { - Assert.assertEquals(list.size(), 2); - Assert.assertEquals(list.get(0).getString0(), "字符串0"); - Assert.assertEquals(list.get(1).getString0(), "字符串1"); + Assertions.assertEquals(list.size(), 2); + Assertions.assertEquals(list.get(0).getString0(), "字符串0"); + Assertions.assertEquals(list.get(1).getString0(), "字符串1"); LOGGER.debug("First row:{}", JSON.toJSONString(list.get(0))); } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataTest.java index d6ebd0aa..66c90d08 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataTest.java @@ -7,23 +7,21 @@ import java.util.List; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; /** - * * @author Jiaju Zhuang */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@TestMethodOrder(MethodOrderer.MethodName.class) public class TemplateDataTest { private static File file07; private static File file03; - - @BeforeClass + @BeforeAll public static void init() { file07 = TestFileUtil.createNewFile("template07.xlsx"); file03 = TestFileUtil.createNewFile("template03.xls"); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java index 7023f31f..53b8b273 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java @@ -16,8 +16,7 @@ import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.excel.write.metadata.fill.FillWrapper; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** * 写的填充写法 @@ -25,7 +24,7 @@ import org.junit.Test; * @author Jiaju Zhuang * @since 2.1.1 */ -@Ignore + public class FillTest { /** * 最简单的填充 diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/WriteTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/WriteTest.java index c35d7f96..b41ae653 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/WriteTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/rare/WriteTest.java @@ -11,10 +11,8 @@ import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.util.FileUtils; import com.alibaba.excel.util.ListUtils; import com.alibaba.excel.write.handler.RowWriteHandler; -import com.alibaba.excel.write.handler.SheetWriteHandler; import com.alibaba.excel.write.handler.WorkbookWriteHandler; import com.alibaba.excel.write.handler.context.RowWriteHandlerContext; -import com.alibaba.excel.write.handler.context.SheetWriteHandlerContext; import com.alibaba.excel.write.handler.context.WorkbookWriteHandlerContext; import com.alibaba.excel.write.metadata.WriteSheet; @@ -24,15 +22,14 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** * 记录一些不太常见的案例 * * @author Jiaju Zhuang */ -@Ignore + @Slf4j public class WriteTest { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExtraListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExtraListener.java index 130d5675..15c285df 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExtraListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExtraListener.java @@ -6,7 +6,7 @@ import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.fastjson2.JSON; import lombok.extern.slf4j.Slf4j; -import org.junit.Assert; +import org.junit.jupiter.api.Assertions; /** * 读取单元格的批注 @@ -27,7 +27,8 @@ public class DemoExtraListener implements ReadListener { log.info("读取到了一条额外信息:{}", JSON.toJSONString(extra)); switch (extra.getType()) { case COMMENT: - log.info("额外信息是批注,在rowIndex:{},columnIndex;{},内容是:{}", extra.getRowIndex(), extra.getColumnIndex(), + log.info("额外信息是批注,在rowIndex:{},columnIndex;{},内容是:{}", extra.getRowIndex(), + extra.getColumnIndex(), extra.getText()); break; case HYPERLINK: @@ -41,7 +42,7 @@ public class DemoExtraListener implements ReadListener { extra.getFirstRowIndex(), extra.getFirstColumnIndex(), extra.getLastRowIndex(), extra.getLastColumnIndex(), extra.getText()); } else { - Assert.fail("Unknown hyperlink!"); + Assertions.fail("Unknown hyperlink!"); } break; case MERGE: diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java index 83ec2c90..a405fae0 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java @@ -20,15 +20,14 @@ import com.alibaba.excel.util.ListUtils; import com.alibaba.fastjson2.JSON; import lombok.extern.slf4j.Slf4j; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** * 读的常见写法 * * @author Jiaju Zhuang */ -@Ignore + @Slf4j public class ReadTest { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/ImageDataWithAnnotation.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/ImageDataWithAnnotation.java index 4c39ffb1..ad59b68f 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/ImageDataWithAnnotation.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/ImageDataWithAnnotation.java @@ -15,7 +15,6 @@ import lombok.Setter; /** * 图片导出类 - * */ @Getter @Setter diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java index 705c2b53..cd120e22 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java @@ -46,15 +46,14 @@ import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.streaming.SXSSFSheet; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** * 写的常见写法 * * @author Jiaju Zhuang */ -@Ignore + public class WriteTest { /** diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/DemoData3.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/DemoData3.java index 0be8ec7a..9daffc57 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/DemoData3.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/DemoData3.java @@ -1,9 +1,7 @@ package com.alibaba.easyexcel.test.temp; import java.time.LocalDateTime; -import java.util.Date; -import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import lombok.EqualsAndHashCode; diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/FillTempTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/FillTempTest.java index 7917e063..d28fe298 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/FillTempTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/FillTempTest.java @@ -5,9 +5,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.junit.Ignore; -import org.junit.Test; - import com.alibaba.easyexcel.test.demo.fill.FillData; import com.alibaba.easyexcel.test.temp.fill.FillData2; import com.alibaba.easyexcel.test.util.TestFileUtil; @@ -16,13 +13,15 @@ import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy; import com.alibaba.excel.write.metadata.WriteSheet; +import org.junit.jupiter.api.Test; + /** * 写的填充写法 * - * @since 2.1.1 * @author Jiaju Zhuang + * @since 2.1.1 */ -@Ignore + public class FillTempTest { /** @@ -37,7 +36,8 @@ public class FillTempTest { OnceAbsoluteMergeStrategy onceAbsoluteMergeStrategy = new OnceAbsoluteMergeStrategy(2, 2, 0, 1); String fileName = TestFileUtil.getPath() + "complexFill" + System.currentTimeMillis() + ".xlsx"; - ExcelWriter excelWriter = EasyExcel.write(fileName).registerWriteHandler(onceAbsoluteMergeStrategy).withTemplate(TestFileUtil.readUserHomeFile("test/simple.xlsx")).build(); + ExcelWriter excelWriter = EasyExcel.write(fileName).registerWriteHandler(onceAbsoluteMergeStrategy) + .withTemplate(TestFileUtil.readUserHomeFile("test/simple.xlsx")).build(); WriteSheet writeSheet0 = EasyExcel.writerSheet(0).build(); WriteSheet writeSheet1 = EasyExcel.writerSheet(1).build(); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java index 283ce133..eba2453b 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java @@ -18,8 +18,6 @@ import com.alibaba.easyexcel.test.demo.write.DemoData; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.metadata.data.ReadCellData; -import com.alibaba.excel.util.NumberDataFormatterUtils; -import com.alibaba.excel.util.NumberUtils; import com.alibaba.excel.util.PositionUtils; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.metadata.style.WriteFont; @@ -32,11 +30,10 @@ import org.apache.poi.hssf.util.CellReference; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.IndexedColors; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.util.StringUtils; /** * 临时测试 @@ -55,7 +52,8 @@ public class Lock2Test { File file = new File("/Users/zhuangjiaju/IdeaProjects/easyexcel/src/test/resources/converter/converter07.xlsx"); List list = EasyExcel.read( - "/Users/zhuangjiaju/IdeaProjects/easyexcel/easyexcel-test/target/test-classes/simpleWrite1674051907397.xlsx") + "/Users/zhuangjiaju/IdeaProjects/easyexcel/easyexcel-test/target/test-classes" + + "/simpleWrite1674051907397.xlsx") //.useDefaultListener(false) .sheet(0) .headRowNumber(0).doReadSync(); @@ -266,9 +264,9 @@ public class Lock2Test { Date date = new Date(dateTime); double excelDate = DateUtil.getExcelDate(date); - Assert.assertEquals("测试基本转换错误" + dateTime, format.format(date), + Assertions.assertEquals("测试基本转换错误" + dateTime, format.format(date), format.format(DateUtil.getJavaDate(excelDate, false))); - Assert.assertEquals("测试精度5转换错误" + dateTime, format.format(date), + Assertions.assertEquals("测试精度5转换错误" + dateTime, format.format(date), format.format(DateUtil.getJavaDate(BigDecimal.valueOf(excelDate) .setScale(10, RoundingMode.HALF_UP).doubleValue(), false))); LOGGER.info("date:{}", format2.format(DateUtil.getJavaDate(BigDecimal.valueOf(excelDate) @@ -353,9 +351,8 @@ public class Lock2Test { @Test public void numberforamt99() throws Exception { - LocalDateTime localDateTime=LocalDateTime.of(2023, 1, 1, 0, 0, 0, 995000000); - log.info("date:{}",localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"))); - + LocalDateTime localDateTime = LocalDateTime.of(2023, 1, 1, 0, 0, 0, 995000000); + log.info("date:{}", localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"))); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockDataListener.java index d7003f25..6a95ab04 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockDataListener.java @@ -3,14 +3,14 @@ package com.alibaba.easyexcel.test.temp; import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.easyexcel.test.demo.read.DemoDataListener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 模板的读取类 * diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java index 8e4ec6c9..9dac75b0 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java @@ -7,8 +7,7 @@ import java.util.Map; import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson2.JSON; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,14 +16,15 @@ import org.slf4j.LoggerFactory; * * @author Jiaju Zhuang **/ -@Ignore + public class LockTest { private static final Logger LOGGER = LoggerFactory.getLogger(LockTest.class); @Test public void test() throws Exception { List list = - EasyExcel.read(new FileInputStream("/Users/zhuangjiaju/Downloads/-0304.2.xlsx")).useDefaultListener(false).doReadAllSync(); + EasyExcel.read(new FileInputStream("/Users/zhuangjiaju/Downloads/-0304.2.xlsx")).useDefaultListener(false) + .doReadAllSync(); for (Object data : list) { LOGGER.info("返回数据:{}", JSON.toJSONString(data)); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleData.java index 89453e5e..df898cf0 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleData.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleData.java @@ -7,7 +7,6 @@ import lombok.Getter; import lombok.Setter; /** - * * @author Jiaju Zhuang **/ @Getter diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java index 0f1f0832..509dc57e 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java @@ -7,6 +7,9 @@ import java.lang.reflect.Field; import java.util.Date; import java.util.List; +import com.alibaba.excel.EasyExcel; +import com.alibaba.fastjson2.JSON; + import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; @@ -22,20 +25,16 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.alibaba.excel.EasyExcel; -import com.alibaba.fastjson2.JSON; - /** * 临时测试 * * @author Jiaju Zhuang **/ -@Ignore + public class StyleTest { private static final Logger LOGGER = LoggerFactory.getLogger(StyleTest.class); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteLargeTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteLargeTest.java index aa772c20..e1adb770 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteLargeTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteLargeTest.java @@ -14,8 +14,7 @@ import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.IndexedColors; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,7 +23,7 @@ import org.slf4j.LoggerFactory; * * @author Jiaju Zhuang **/ -@Ignore + public class WriteLargeTest { private static final Logger LOGGER = LoggerFactory.getLogger(WriteLargeTest.class); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java index 4e258e51..ed5b2385 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java @@ -16,8 +16,7 @@ import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Workbook; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,7 +25,7 @@ import org.slf4j.LoggerFactory; * * @author Jiaju Zhuang **/ -@Ignore + public class WriteV33Test { private static final Logger LOGGER = LoggerFactory.getLogger(WriteV33Test.class); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV34Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV34Test.java index f9215d7b..68d8794b 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV34Test.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV34Test.java @@ -3,13 +3,6 @@ package com.alibaba.easyexcel.test.temp; import java.util.ArrayList; import java.util.List; -import org.apache.poi.ss.usermodel.FillPatternType; -import org.apache.poi.ss.usermodel.IndexedColors; -import org.junit.Ignore; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.easyexcel.test.demo.write.DemoData; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; @@ -17,12 +10,18 @@ import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.metadata.style.WriteFont; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 临时测试 * * @author Jiaju Zhuang **/ -@Ignore + public class WriteV34Test { private static final Logger LOGGER = LoggerFactory.getLogger(WriteV34Test.class); @@ -52,11 +51,11 @@ public class WriteV34Test { new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName,DemoData.class).head(head()).registerWriteHandler(horizontalCellStyleStrategy).sheet("模板") + EasyExcel.write(fileName, DemoData.class).head(head()).registerWriteHandler(horizontalCellStyleStrategy).sheet( + "模板") .doWrite(data(1)); } - private List> head() { List> list = new ArrayList>(); List head0 = new ArrayList(); @@ -70,8 +69,8 @@ public class WriteV34Test { head3.add("日期" + System.currentTimeMillis()); list.add(head0); list.add(head1); - list.add(head2); list.add(head3); - + list.add(head2); + list.add(head3); return list; } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java index b7624599..7d5a4490 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java @@ -6,8 +6,7 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.util.BeanMapUtils; import com.alibaba.fastjson2.JSON; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cglib.beans.BeanMap; @@ -18,7 +17,7 @@ import org.springframework.cglib.core.DebuggingClassWriter; * * @author Jiaju Zhuang **/ -@Ignore + public class Xls03Test { private static final Logger LOGGER = LoggerFactory.getLogger(Xls03Test.class); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/ExcelCreat.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/ExcelCreat.java index f9d97463..f190ea78 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/ExcelCreat.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/ExcelCreat.java @@ -1,14 +1,14 @@ package com.alibaba.easyexcel.test.temp.bug; -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.ExcelWriter; -import com.alibaba.excel.write.metadata.WriteSheet; - import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.Collections; import java.util.List; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; + /** * @author jiaosong * @desc @@ -16,7 +16,6 @@ import java.util.List; */ public class ExcelCreat { - public static void main(String[] args) throws FileNotFoundException { List data = getData(); ExcelWriter excelWriter = null; diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/HeadType.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/HeadType.java index bcfa101c..e04f74a7 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/HeadType.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/HeadType.java @@ -16,14 +16,12 @@ import lombok.Setter; @EqualsAndHashCode public class HeadType { - /** * 任务id */ @ExcelProperty("任务ID") private Integer id; - @ExcelProperty(value = "备注1") private String firstRemark; diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/cache/CacheTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/cache/CacheTest.java index 22015457..7ff376f6 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/cache/CacheTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/cache/CacheTest.java @@ -4,26 +4,23 @@ import java.io.File; import java.util.HashMap; import java.util.UUID; +import com.alibaba.easyexcel.test.temp.poi.Poi2Test; +import com.alibaba.excel.util.FileUtils; +import com.alibaba.fastjson2.JSON; + import org.ehcache.Cache; import org.ehcache.PersistentCacheManager; import org.ehcache.config.builders.CacheConfigurationBuilder; import org.ehcache.config.builders.CacheManagerBuilder; import org.ehcache.config.builders.ResourcePoolsBuilder; import org.ehcache.config.units.MemoryUnit; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.alibaba.easyexcel.test.temp.poi.Poi2Test; -import com.alibaba.excel.util.FileUtils; -import com.alibaba.fastjson2.JSON; - /** - * * @author Jiaju Zhuang **/ -@Ignore public class CacheTest { private static final Logger LOGGER = LoggerFactory.getLogger(Poi2Test.class); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvReadTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvReadTest.java index 2a6c69ce..015970c3 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvReadTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvReadTest.java @@ -18,10 +18,8 @@ import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; import org.apache.commons.csv.CSVRecord; import org.apache.poi.poifs.filesystem.FileMagic; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; -@Ignore @Slf4j public class CsvReadTest { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/data/HeadType.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/data/HeadType.java index 2eaf0a27..53fd0df4 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/data/HeadType.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/data/HeadType.java @@ -11,14 +11,12 @@ import lombok.Setter; @EqualsAndHashCode public class HeadType { - /** * 任务id */ @ExcelProperty("任务ID") private Integer id; - @ExcelProperty(value = "备注1") private String firstRemark; diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatTest.java index 280a5046..3e7baf74 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatTest.java @@ -22,8 +22,7 @@ import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,7 +31,7 @@ import org.slf4j.LoggerFactory; * * @author Jiaju Zhuang **/ -@Ignore + public class DataFormatTest { private static final Logger LOGGER = LoggerFactory.getLogger(Lock2Test.class); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatter1.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatter1.java index c4dce8d3..6af972ef 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatter1.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatter1.java @@ -120,16 +120,24 @@ import org.apache.poi.util.POILogger; public class DataFormatter1 implements Observer { private static final String defaultFractionWholePartFormat = "#"; private static final String defaultFractionFractionPartFormat = "#/##"; - /** Pattern to find a number format: "0" or "#" */ + /** + * Pattern to find a number format: "0" or "#" + */ private static final Pattern numPattern = Pattern.compile("[0#]+"); - /** Pattern to find days of week as text "ddd...." */ + /** + * Pattern to find days of week as text "ddd...." + */ private static final Pattern daysAsText = Pattern.compile("([d]{3,})", Pattern.CASE_INSENSITIVE); - /** Pattern to find "AM/PM" marker */ + /** + * Pattern to find "AM/PM" marker + */ private static final Pattern amPmPattern = Pattern.compile("((A|P)[M/P]*)", Pattern.CASE_INSENSITIVE); - /** Pattern to find formats with condition ranges e.g. [>=100] */ + /** + * Pattern to find formats with condition ranges e.g. [>=100] + */ private static final Pattern rangeConditionalPattern = Pattern.compile(".*\\[\\s*(>|>=|<|<=|=)\\s*[0-9]*\\.*[0-9].*"); @@ -167,10 +175,10 @@ public class DataFormatter1 implements Observer { * ("#"). */ private static final String invalidDateTimeString; + static { StringBuilder buf = new StringBuilder(); - for (int i = 0; i < 255; i++) - buf.append('#'); + for (int i = 0; i < 255; i++) {buf.append('#');} invalidDateTimeString = buf.toString(); } @@ -189,10 +197,14 @@ public class DataFormatter1 implements Observer { */ private DateFormat defaultDateformat; - /** General format for numbers. */ + /** + * General format for numbers. + */ private Format generalNumberFormat; - /** A default format to use when a number pattern cannot be parsed. */ + /** + * A default format to use when a number pattern cannot be parsed. + */ private Format defaultNumFormat; /** @@ -202,10 +214,14 @@ public class DataFormatter1 implements Observer { private final boolean emulateCSV; - /** stores the locale valid it the last formatting call */ + /** + * stores the locale valid it the last formatting call + */ private Locale locale; - /** stores if the locale should change according to {@link LocaleUtil#getUserLocale()} */ + /** + * stores if the locale should change according to {@link LocaleUtil#getUserLocale()} + */ private boolean localeIsAdapting; private class LocaleChangeObservable extends Observable { @@ -214,19 +230,21 @@ public class DataFormatter1 implements Observer { } void checkForLocaleChange(Locale newLocale) { - if (!localeIsAdapting) - return; - if (newLocale.equals(locale)) - return; + if (!localeIsAdapting) {return;} + if (newLocale.equals(locale)) {return;} super.setChanged(); notifyObservers(newLocale); } } - /** the Observable to notify, when the locale has been changed */ + /** + * the Observable to notify, when the locale has been changed + */ private final LocaleChangeObservable localeChangedObservable = new LocaleChangeObservable(); - /** For logging any problems we find */ + /** + * For logging any problems we find + */ private static POILogger logger = POILogFactory.getLogger(DataFormatter.class); /** @@ -239,8 +257,7 @@ public class DataFormatter1 implements Observer { /** * Creates a formatter using the {@link Locale#getDefault() default locale}. * - * @param emulateCSV - * whether to emulate CSV output. + * @param emulateCSV whether to emulate CSV output. */ public DataFormatter1(boolean emulateCSV) { this(LocaleUtil.getUserLocale(), true, emulateCSV); @@ -256,8 +273,7 @@ public class DataFormatter1 implements Observer { /** * Creates a formatter using the given locale. * - * @param emulateCSV - * whether to emulate CSV output. + * @param emulateCSV whether to emulate CSV output. */ public DataFormatter1(Locale locale, boolean emulateCSV) { this(locale, false, emulateCSV); @@ -266,10 +282,8 @@ public class DataFormatter1 implements Observer { /** * Creates a formatter using the given locale. * - * @param localeIsAdapting - * (true only if locale is not user-specified) - * @param emulateCSV - * whether to emulate CSV output. + * @param localeIsAdapting (true only if locale is not user-specified) + * @param emulateCSV whether to emulate CSV output. */ private DataFormatter1(Locale locale, boolean localeIsAdapting, boolean emulateCSV) { this.localeIsAdapting = true; @@ -292,13 +306,11 @@ public class DataFormatter1 implements Observer { *
  • the format string cannot be recognized as either a number or date
  • * * - * @param cell - * The cell to retrieve a Format for + * @param cell The cell to retrieve a Format for * @return A Format for the format String */ private Format getFormat(Cell cell, ConditionalFormattingEvaluator cfEvaluator) { - if (cell == null) - return null; + if (cell == null) {return null;} ExcelNumberFormat numFmt = ExcelNumberFormat.from(cell, cfEvaluator); @@ -339,7 +351,7 @@ public class DataFormatter1 implements Observer { // CellFormat requires callers to identify date vs not, so do so Object cellValueO = Double.valueOf(cellValue); if (DateUtil.isADateFormat(formatIndex, formatStr) && - // don't try to handle Date value 0, let a 3 or 4-part format take care of it + // don't try to handle Date value 0, let a 3 or 4-part format take care of it ((Double)cellValueO).doubleValue() != 0.0) { cellValueO = DateUtil.getJavaDate(cellValue); } @@ -376,8 +388,7 @@ public class DataFormatter1 implements Observer { * Create and return a Format based on the format string from a cell's style. If the pattern cannot be parsed, * return a default pattern. * - * @param cell - * The Excel cell + * @param cell The Excel cell * @return A Format representing the excel format. May return null. */ public Format createFormat(Cell cell) { @@ -399,11 +410,9 @@ public class DataFormatter1 implements Observer { // Paranoid replacement... int at = formatStr.indexOf(colour); - if (at == -1) - break; + if (at == -1) {break;} String nFormatStr = formatStr.substring(0, at) + formatStr.substring(at + colour.length()); - if (nFormatStr.equals(formatStr)) - break; + if (nFormatStr.equals(formatStr)) {break;} // Try again in case there's multiple formatStr = nFormatStr; @@ -432,7 +441,7 @@ public class DataFormatter1 implements Observer { return generalNumberFormat; } - if ("".equals("")||(DateUtil.isADateFormat(formatIndex, formatStr) && DateUtil.isValidExcelDate(cellValue))) { + if ("".equals("") || (DateUtil.isADateFormat(formatIndex, formatStr) && DateUtil.isValidExcelDate(cellValue))) { return createDateFormat(formatStr, cellValue); } // Excel supports fractions in format strings, which Java doesn't @@ -760,8 +769,7 @@ public class DataFormatter1 implements Observer { /** * Returns a default format for a cell. * - * @param cell - * The cell + * @param cell The cell * @return a default format */ public Format getDefaultFormat(Cell cell) { @@ -795,10 +803,8 @@ public class DataFormatter1 implements Observer { * number format, or no rules apply, the cell's style format is used. If the style does not have a format, the * default date format is applied. * - * @param cell - * to format - * @param cfEvaluator - * ConditionalFormattingEvaluator (if available) + * @param cell to format + * @param cfEvaluator ConditionalFormattingEvaluator (if available) * @return Formatted value */ private String getFormattedDateString(Cell cell, ConditionalFormattingEvaluator cfEvaluator) { @@ -819,10 +825,8 @@ public class DataFormatter1 implements Observer { * Format comes from either the highest priority conditional format rule with a specified format, or from the cell * style. * - * @param cell - * The cell - * @param cfEvaluator - * if available, or null + * @param cell The cell + * @param cfEvaluator if available, or null * @return a formatted number string */ private String getFormattedNumberString(Cell cell, ConditionalFormattingEvaluator cfEvaluator) { @@ -905,8 +909,7 @@ public class DataFormatter1 implements Observer { * will not be evaluated. *

    * - * @param cell - * The cell + * @param cell The cell * @return the formatted cell value as a String */ public String formatCellValue(Cell cell) { @@ -924,10 +927,8 @@ public class DataFormatter1 implements Observer { * String will be returned. The caller is responsible for setting the currentRow on the evaluator *

    * - * @param cell - * The cell (can be null) - * @param evaluator - * The FormulaEvaluator (can be null) + * @param cell The cell (can be null) + * @param evaluator The FormulaEvaluator (can be null) * @return a string value of the cell */ public String formatCellValue(Cell cell, FormulaEvaluator evaluator) { @@ -953,12 +954,9 @@ public class DataFormatter1 implements Observer { * The two evaluators should be from the same context, to avoid inconsistencies in cached values. *

    * - * @param cell - * The cell (can be null) - * @param evaluator - * The FormulaEvaluator (can be null) - * @param cfEvaluator - * ConditionalFormattingEvaluator (can be null) + * @param cell The cell (can be null) + * @param evaluator The FormulaEvaluator (can be null) + * @param cfEvaluator ConditionalFormattingEvaluator (can be null) * @return a string value of the cell */ public String formatCellValue(Cell cell, FormulaEvaluator evaluator, ConditionalFormattingEvaluator cfEvaluator) { @@ -978,10 +976,10 @@ public class DataFormatter1 implements Observer { switch (cellType) { case NUMERIC: -// if (DateUtil.isCellDateFormatted(cell, cfEvaluator)) { - return getFormattedDateString(cell, cfEvaluator); -// } -// return getFormattedNumberString(cell, cfEvaluator); + // if (DateUtil.isCellDateFormatted(cell, cfEvaluator)) { + return getFormattedDateString(cell, cfEvaluator); + // } + // return getFormattedNumberString(cell, cfEvaluator); case STRING: return cell.getRichStringCellValue().getString(); @@ -1009,8 +1007,7 @@ public class DataFormatter1 implements Observer { * Number value. *

    * - * @param format - * A Format instance to be used as a default + * @param format A Format instance to be used as a default * @see java.text.Format#format */ public void setDefaultNumberFormat(Format format) { @@ -1030,10 +1027,8 @@ public class DataFormatter1 implements Observer { * Number value. *

    * - * @param excelFormatStr - * The data format string - * @param format - * A Format instance + * @param excelFormatStr The data format string + * @param format A Format instance */ public void addFormat(String excelFormatStr, Format format) { formats.put(excelFormatStr, format); @@ -1061,10 +1056,8 @@ public class DataFormatter1 implements Observer { /** * Enables custom rounding mode on the given Decimal Format. * - * @param format - * DecimalFormat - * @param roundingMode - * RoundingMode + * @param format DecimalFormat + * @param roundingMode RoundingMode */ public static void setExcelStyleRoundingMode(DecimalFormat format, RoundingMode roundingMode) { format.setRoundingMode(roundingMode); @@ -1086,17 +1079,13 @@ public class DataFormatter1 implements Observer { /** * Update formats when locale has been changed * - * @param observable - * usually this is our own Observable instance - * @param localeObj - * only reacts on Locale objects + * @param observable usually this is our own Observable instance + * @param localeObj only reacts on Locale objects */ public void update(Observable observable, Object localeObj) { - if (!(localeObj instanceof Locale)) - return; + if (!(localeObj instanceof Locale)) {return;} Locale newLocale = (Locale)localeObj; - if (!localeIsAdapting || newLocale.equals(locale)) - return; + if (!localeIsAdapting || newLocale.equals(locale)) {return;} locale = newLocale; @@ -1141,7 +1130,9 @@ public class DataFormatter1 implements Observer { // enforce singleton } - /** Format a number as an SSN */ + /** + * Format a number as an SSN + */ public static String format(Number num) { String result = df.format(num); return result.substring(0, 3) + '-' + result.substring(3, 5) + '-' + result.substring(5, 9); @@ -1172,7 +1163,9 @@ public class DataFormatter1 implements Observer { // enforce singleton } - /** Format a number as Zip + 4 */ + /** + * Format a number as Zip + 4 + */ public static String format(Number num) { String result = df.format(num); return result.substring(0, 5) + '-' + result.substring(5, 9); @@ -1203,7 +1196,9 @@ public class DataFormatter1 implements Observer { // enforce singleton } - /** Format a number as a phone number */ + /** + * Format a number as a phone number + */ public static String format(Number num) { String result = df.format(num); StringBuilder sb = new StringBuilder(); @@ -1243,7 +1238,6 @@ public class DataFormatter1 implements Observer { * * This format is used to simulate Excel's handling of a format string of all # when the value is 0. Excel will * output "", Java will output "0". - * */ @SuppressWarnings("serial") private static final class ConstantStringFormat extends Format { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/fill/FillTempTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/fill/FillTempTest.java index 2c201863..352e4600 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/fill/FillTempTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/fill/FillTempTest.java @@ -16,16 +16,15 @@ import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.excel.write.metadata.fill.FillWrapper; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** * 写的填充写法 * - * @since 2.1.1 * @author Jiaju Zhuang + * @since 2.1.1 */ -@Ignore + public class FillTempTest { /** * 最简单的填充 @@ -35,7 +34,7 @@ public class FillTempTest { @Test public void simpleFill() { // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 - String templateFileName ="/Users/zhuangjiaju/Downloads/simple.xlsx"; + String templateFileName = "/Users/zhuangjiaju/Downloads/simple.xlsx"; // 方案1 根据对象填充 String fileName = TestFileUtil.getPath() + "simpleFill" + System.currentTimeMillis() + ".xlsx"; diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1662/Issue1662Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1662/Issue1662Test.java index cea7e5ee..466227fe 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1662/Issue1662Test.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1662/Issue1662Test.java @@ -7,10 +7,8 @@ import java.util.List; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; -@Ignore public class Issue1662Test { @Test public void test1662() { @@ -19,7 +17,6 @@ public class Issue1662Test { EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList()); } - private List> head() { List> list = new ArrayList>(); List head0 = new ArrayList(); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1663/FillTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1663/FillTest.java index 7f89621c..f9c2a2b4 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1663/FillTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1663/FillTest.java @@ -15,13 +15,11 @@ import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.excel.write.metadata.fill.FillWrapper; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; -@Ignore public class FillTest { @Test - public void TestFillNullPoint(){ + public void TestFillNullPoint() { String templateFileName = TestFileUtil.getPath() + "temp/issue1663" + File.separator + "template.xlsx"; @@ -37,8 +35,10 @@ public class FillTest { excelWriter.fill(map, writeSheet); excelWriter.finish(); } + private List data() { - List list = new ArrayList(); + List list + = new ArrayList(); for (int i = 0; i < 10; i++) { com.alibaba.easyexcel.test.demo.fill.FillData fillData = new FillData(); list.add(fillData); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2443/Issue2443Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2443/Issue2443Test.java index b9e2c965..d23f9fb8 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2443/Issue2443Test.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2443/Issue2443Test.java @@ -1,19 +1,20 @@ package com.alibaba.easyexcel.test.temp.issue2443; +import java.io.File; +import java.text.ParseException; + import com.alibaba.easyexcel.test.util.TestFileUtil; -import com.alibaba.excel.metadata.property.ExcelContentProperty; -import com.alibaba.excel.util.NumberUtils; import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.metadata.property.ExcelContentProperty; import com.alibaba.excel.read.listener.PageReadListener; +import com.alibaba.excel.util.NumberUtils; import com.alibaba.fastjson2.JSON; + import lombok.extern.slf4j.Slf4j; -import org.junit.Ignore; -import org.junit.Test; -import static org.junit.Assert.*; -import java.io.File; -import java.text.ParseException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + -@Ignore @Slf4j public class Issue2443Test { //CS304 (manually written) Issue link: https://github.com/alibaba/easyexcel/issues/2443 @@ -26,6 +27,7 @@ public class Issue2443Test { } })).sheet().doRead(); } + //CS304 (manually written) Issue link: https://github.com/alibaba/easyexcel/issues/2443 @Test public void IssueTest2() { @@ -41,16 +43,16 @@ public class Issue2443Test { public void parseIntegerTest1() throws ParseException { String string = "1.00"; ExcelContentProperty contentProperty = null; - int Int = NumberUtils.parseInteger(string,contentProperty); - assertEquals(1, Int); + int Int = NumberUtils.parseInteger(string, contentProperty); + Assertions.assertEquals(1, Int); } @Test public void parseIntegerTest2() throws ParseException { String string = "2.00"; ExcelContentProperty contentProperty = null; - int Int = NumberUtils.parseInteger(string,contentProperty); - assertEquals(2, Int); + int Int = NumberUtils.parseInteger(string, contentProperty); + Assertions.assertEquals(2, Int); } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/LargeDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/LargeDataListener.java index 25176101..b62ee1f6 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/LargeDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/LargeDataListener.java @@ -1,12 +1,12 @@ package com.alibaba.easyexcel.test.temp.large; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/NoModelLargeDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/NoModelLargeDataListener.java index 2d532bb2..5e180624 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/NoModelLargeDataListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/NoModelLargeDataListener.java @@ -2,13 +2,13 @@ package com.alibaba.easyexcel.test.temp.large; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * @author Jiaju Zhuang */ diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/TempLargeDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/TempLargeDataTest.java index 934b62f5..b88bf06e 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/TempLargeDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/TempLargeDataTest.java @@ -19,17 +19,16 @@ import org.apache.poi.xssf.streaming.SXSSFCell; import org.apache.poi.xssf.streaming.SXSSFRow; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Jiaju Zhuang */ -@Ignore + public class TempLargeDataTest { private static final Logger LOGGER = LoggerFactory.getLogger(LargeDataTest.class); @@ -42,7 +41,7 @@ public class TempLargeDataTest { private static File fileWriteTemp07; private static File fileWritePoi07; - @BeforeClass + @BeforeAll public static void init() { fileFill07 = TestFileUtil.createNewFile("largefill07.xlsx"); fileWrite07 = TestFileUtil.createNewFile("large" + File.separator + "fileWrite07.xlsx"); @@ -124,7 +123,7 @@ public class TempLargeDataTest { long costPoi = System.currentTimeMillis() - start; LOGGER.info("poi write cost:{}", System.currentTimeMillis() - start); LOGGER.info("{} vs {}", cost, costPoi); - Assert.assertTrue(costPoi * 2 > cost); + Assertions.assertTrue(costPoi * 2 > cost); } @Test @@ -167,9 +166,9 @@ public class TempLargeDataTest { for (int j = 0; j < 25; j++) { String str = "str-" + j + "-" + i; //if (i + 10000 == j) { - SXSSFCell cell = row.createCell(j); - cell.setCellValue(str); - //System.out.println(str); + SXSSFCell cell = row.createCell(j); + cell.setCellValue(str); + //System.out.println(str); //} } if (i % 5000 == 0) { diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi2Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi2Test.java index 6e1933ab..a2567e11 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi2Test.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi2Test.java @@ -8,8 +8,7 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,7 +17,7 @@ import org.slf4j.LoggerFactory; * * @author Jiaju Zhuang **/ -@Ignore + public class Poi2Test { private static final Logger LOGGER = LoggerFactory.getLogger(Poi2Test.class); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi3Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi3Test.java index 4eb7714c..b9cac73f 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi3Test.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi3Test.java @@ -4,6 +4,8 @@ import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; +import com.alibaba.easyexcel.test.util.TestFileUtil; + import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.openxml4j.opc.OPCPackage; @@ -12,19 +14,16 @@ import org.apache.poi.poifs.crypt.EncryptionInfo; import org.apache.poi.poifs.crypt.EncryptionMode; import org.apache.poi.poifs.crypt.Encryptor; import org.apache.poi.poifs.filesystem.POIFSFileSystem; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.alibaba.easyexcel.test.util.TestFileUtil; - /** * 测试poi * * @author Jiaju Zhuang **/ -@Ignore + public class Poi3Test { private static final Logger LOGGER = LoggerFactory.getLogger(Poi3Test.class); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiEncryptTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiEncryptTest.java index 67b6cfc7..5484a614 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiEncryptTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiEncryptTest.java @@ -17,28 +17,24 @@ import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** * TODO * * @author Jiaju Zhuang */ -@Ignore + public class PoiEncryptTest { @Test public void encrypt() throws Exception { - - XSSFWorkbook workbook = new XSSFWorkbook(); SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(workbook); Sheet sheet = sxssfWorkbook.createSheet("sheet1"); sheet.createRow(0).createCell(0).setCellValue("T2"); - POIFSFileSystem fs = new POIFSFileSystem(); EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile); @@ -62,7 +58,7 @@ public class PoiEncryptTest { @Test public void encryptExcel() throws Exception { EasyExcel.write(TestFileUtil.createNewFile("encryptv2" + System.currentTimeMillis() + ".xlsx"), - EncryptData.class).password("123456") + EncryptData.class).password("123456") .sheet().doWrite(data()); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiFormatTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiFormatTest.java index b20004a9..4dfef5b1 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiFormatTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiFormatTest.java @@ -11,8 +11,7 @@ import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,7 +20,7 @@ import org.slf4j.LoggerFactory; * * @author Jiaju Zhuang **/ -@Ignore + public class PoiFormatTest { private static final Logger LOGGER = LoggerFactory.getLogger(PoiFormatTest.class); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiTest.java index e27136d4..6c3f229a 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiTest.java @@ -28,8 +28,7 @@ import org.apache.poi.xssf.usermodel.XSSFFont; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,7 +37,7 @@ import org.slf4j.LoggerFactory; * * @author Jiaju Zhuang **/ -@Ignore + public class PoiTest { private static final Logger LOGGER = LoggerFactory.getLogger(PoiTest.class); @@ -84,7 +83,6 @@ public class PoiTest { LOGGER.info("bbb:{}", cellStyle1.getFont().getBold()); LOGGER.info("bbb:{}", cellStyle1.getFont().getFontName()); - XSSFFont xssfFont = xssfWorkbook.createFont(); xssfFont.setColor(myColor); @@ -94,7 +92,6 @@ public class PoiTest { cellStyle1.setFont(xssfFont); cellStyle1.setFillForegroundColor(IndexedColors.PINK.getIndex()); - LOGGER.info("aaa:{}", cellStyle1.getFont().getColor()); row.getCell(1).setCellStyle(cellStyle1); @@ -118,7 +115,6 @@ public class PoiTest { xssfWorkbook.close(); } - @Test public void lastRowNumXSSFv22() throws IOException { @@ -142,7 +138,6 @@ public class PoiTest { LOGGER.info("bbb:{}", cellStyle1.getFont(xssfWorkbook).getColor()); - HSSFFont xssfFont = xssfWorkbook.createFont(); xssfFont.setColor(cellStyle1.getFont(xssfWorkbook).getColor()); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java index 7ce3f587..98e7509a 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java @@ -14,8 +14,7 @@ import org.apache.poi.xssf.streaming.SXSSFCell; import org.apache.poi.xssf.streaming.SXSSFRow; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,7 +23,7 @@ import org.slf4j.LoggerFactory; * * @author Jiaju Zhuang **/ -@Ignore + public class PoiWriteTest { private static final Logger LOGGER = LoggerFactory.getLogger(PoiWriteTest.class); @@ -110,11 +109,12 @@ public class PoiWriteTest { @Test public void part4() throws IOException { //URL url=new URL("http://120.55.161.4/group1/M00/00/00/i8QJ8WFfwMiAXKYrAAACqC1MFiY641.png"); - URL url=new URL("https://img-blog.csdn.net/20160729002743309?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"); + URL url = new URL( + "https://img-blog.csdn.net/20160729002743309?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T" + + "/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"); InputStream in = new BufferedInputStream(url.openStream()); - } } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/CommentTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/CommentTest.java index 780b1ce4..b05fd540 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/CommentTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/CommentTest.java @@ -4,21 +4,20 @@ import java.io.File; import java.util.List; import java.util.Map; -import org.junit.Ignore; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.EasyExcel; import com.alibaba.excel.metadata.data.CellData; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 临时测试 * * @author Jiaju Zhuang **/ -@Ignore + public class CommentTest { private static final Logger LOGGER = LoggerFactory.getLogger(CommentTest.class); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HDListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HDListener.java index 7ee174d9..094c58f5 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HDListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HDListener.java @@ -2,13 +2,13 @@ package com.alibaba.easyexcel.test.temp.read; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 模板的读取类 * diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadListener.java index 711e5b9b..4d1eb8ba 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadListener.java @@ -2,13 +2,13 @@ package com.alibaba.easyexcel.test.temp.read; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 模板的读取类 * diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadData.java index 90a721a2..a942763f 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadData.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadData.java @@ -15,7 +15,7 @@ import lombok.Setter; @Setter @EqualsAndHashCode public class HeadReadData { - @ExcelProperty({"主标题","数据1"}) + @ExcelProperty({"主标题", "数据1"}) private String h1; @ExcelProperty({"主标题", "数据2"}) private String h2; diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadTest.java index 6649c2fe..ab004258 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadTest.java @@ -6,8 +6,7 @@ import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.cache.Ehcache; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,7 +15,7 @@ import org.slf4j.LoggerFactory; * * @author Jiaju Zhuang **/ -@Ignore + public class HeadReadTest { private static final Logger LOGGER = LoggerFactory.getLogger(HeadReadTest.class); @@ -38,5 +37,4 @@ public class HeadReadTest { EasyExcel.read(file, HeadReadData.class, new HDListener()).readCache(new Ehcache(20)).sheet(0).doRead(); } - } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java index fcb75f11..4e1f40c5 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java @@ -6,27 +6,27 @@ import java.io.InputStream; import java.net.URL; import java.util.List; -import org.junit.Ignore; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 测试poi * * @author Jiaju Zhuang **/ -@Ignore + public class HgTest { private static final Logger LOGGER = LoggerFactory.getLogger(HgTest.class); @Test public void hh() throws IOException { List list = - EasyExcel.read(new FileInputStream("D:\\test\\201909301017rule.xlsx")).headRowNumber(2).sheet().doReadSync(); + EasyExcel.read(new FileInputStream("D:\\test\\201909301017rule.xlsx")).headRowNumber(2).sheet() + .doReadSync(); for (Object data : list) { LOGGER.info("返回数据:{}", JSON.toJSONString(data)); } @@ -34,7 +34,11 @@ public class HgTest { @Test public void hh5() throws IOException { - URL url = new URL("http://hotelcontractfil.oss-cn-beijing.aliyuncs.com/2019/%E5%98%89%E6%83%A0-%E4%B8%AD%E4%BA%A4%E5%BB%BA_2019-09-01_2019-09-30_1569055677522.xlsx?Expires=1884415681&OSSAccessKeyId=LTAIGZDkqZfPArBr&Signature=Rf0gbO8vl3l%2Brj1KdyzHHMsUhCE%3D"); + URL url = new URL( + "http://hotelcontractfil.oss-cn-beijing.aliyuncs" + + ".com/2019/%E5%98%89%E6%83%A0-%E4%B8%AD%E4%BA%A4%E5%BB%BA_2019-09-01_2019-09-30_1569055677522" + + ".xlsx?Expires=1884415681&OSSAccessKeyId=LTAIGZDkqZfPArBr&Signature=Rf0gbO8vl3l%2Brj1KdyzHHMsUhCE" + + "%3D"); InputStream is = url.openStream(); List list = EasyExcel.read(is).headRowNumber(0).sheet().doReadSync(); @@ -45,7 +49,8 @@ public class HgTest { @Test public void hh2() throws IOException { - EasyExcel.read(new FileInputStream("D:\\test\\商户不匹配工单信息收集表格.xlsx")).registerReadListener(new HgListener()) + EasyExcel.read(new FileInputStream("D:\\test\\商户不匹配工单信息收集表格.xlsx")).registerReadListener( + new HgListener()) .headRowNumber(0).sheet().doRead(); } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatListener.java index eab1e1ae..6755c94d 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatListener.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatListener.java @@ -3,15 +3,15 @@ package com.alibaba.easyexcel.test.temp.simple; import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.easyexcel.test.demo.read.DemoDataListener; import com.alibaba.easyexcel.test.temp.LockData; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson2.JSON; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 模板的读取类 * diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatTest.java index d7cf0080..e1e669e4 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatTest.java @@ -3,22 +3,21 @@ package com.alibaba.easyexcel.test.temp.simple; import java.io.FileInputStream; import java.io.IOException; -import org.junit.Ignore; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.easyexcel.test.temp.LockData; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.read.metadata.ReadSheet; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 测试poi * * @author Jiaju Zhuang **/ -@Ignore + public class RepeatTest { private static final Logger LOGGER = LoggerFactory.getLogger(RepeatTest.class); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/Write.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/Write.java index d9b59a52..760a638e 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/Write.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/Write.java @@ -16,8 +16,7 @@ import com.alibaba.excel.write.metadata.WriteTable; import com.alibaba.fastjson2.JSON; import lombok.extern.slf4j.Slf4j; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,7 +25,7 @@ import org.slf4j.LoggerFactory; * * @author Jiaju Zhuang **/ -@Ignore + @Slf4j public class Write { private static final Logger LOGGER = LoggerFactory.getLogger(Write.class); @@ -68,8 +67,9 @@ public class Write { String fileName = TestFileUtil.getPath() + "t33" + System.currentTimeMillis() + ".xlsx"; // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 // 如果这里想使用03 则 传入excelType参数即可 - EasyExcel.write(fileName).head(head()).inMemory(true).sheet("模板").registerWriteHandler(new WriteCellHandler()).doWrite( - data1()); + EasyExcel.write(fileName).head(head()).inMemory(true).sheet("模板").registerWriteHandler(new WriteCellHandler()) + .doWrite( + data1()); } @Test diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteData.java index d9a035ce..f4ced8cb 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteData.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteData.java @@ -15,8 +15,8 @@ import lombok.Setter; @Setter @EqualsAndHashCode public class WriteData { -// @ContentStyle(locked = true) + // @ContentStyle(locked = true) private Date dd; -// @ContentStyle(locked = false) + // @ContentStyle(locked = false) private float f1; } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteTest.java index a8603f12..8c75deab 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteTest.java @@ -1,34 +1,20 @@ package com.alibaba.easyexcel.test.temp.write; import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; -import java.io.InputStream; -import java.net.URL; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import com.alibaba.easyexcel.test.demo.read.CustomStringStringConverter; -import com.alibaba.easyexcel.test.demo.write.DemoData; -import com.alibaba.easyexcel.test.demo.write.ImageDemoData; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.ExcelWriter; -import com.alibaba.excel.enums.CellDataTypeEnum; -import com.alibaba.excel.metadata.data.ImageData; -import com.alibaba.excel.metadata.data.ImageData.ImageType; -import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.util.BeanMapUtils; import com.alibaba.excel.util.FileUtils; import com.alibaba.excel.util.ListUtils; -import com.alibaba.excel.write.metadata.WriteSheet; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.CreationHelper; -import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Picture; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.streaming.SXSSFCell; @@ -36,17 +22,10 @@ import org.apache.poi.xssf.streaming.SXSSFDrawing; import org.apache.poi.xssf.streaming.SXSSFRow; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFCellStyle; -import org.apache.poi.xssf.usermodel.XSSFColor; -import org.apache.poi.xssf.usermodel.XSSFFont; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.springframework.cglib.beans.BeanMap; -@Ignore @Slf4j public class TempWriteTest { @@ -166,7 +145,8 @@ public class TempWriteTest { public void large() throws Exception { String file = "/Users/zhuangjiaju/test/imagetest" + System.currentTimeMillis() + ".xlsx"; SXSSFWorkbook workbook = new SXSSFWorkbook(new XSSFWorkbook( - new File("/Users/zhuangjiaju/IdeaProjects/easyexcel/easyexcel-test/src/test/resources/large/large07.xlsx"))); + new File( + "/Users/zhuangjiaju/IdeaProjects/easyexcel/easyexcel-test/src/test/resources/large/large07.xlsx"))); SXSSFSheet sheet = workbook.createSheet("测试"); SXSSFRow row = sheet.createRow(500000); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java index b0ab7ebb..0e89f275 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java @@ -1,14 +1,13 @@ package com.alibaba.easyexcel.test.util; -import org.springframework.util.CollectionUtils; - import java.io.File; import java.io.InputStream; import java.util.ArrayList; import java.util.List; -public class TestFileUtil { +import org.springframework.util.CollectionUtils; +public class TestFileUtil { public static InputStream getResourcesFileInputStream(String fileName) { return Thread.currentThread().getContextClassLoader().getResourceAsStream("" + fileName); @@ -42,7 +41,6 @@ public class TestFileUtil { return new File(System.getProperty("user.home") + File.separator + pathName); } - /** * build to test file path **/ @@ -75,5 +73,4 @@ public class TestFileUtil { } - } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestUtil.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestUtil.java index 8246f5b9..02077f3a 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestUtil.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestUtil.java @@ -1,7 +1,5 @@ package com.alibaba.easyexcel.test.util; -import java.io.File; -import java.io.InputStream; import java.text.ParseException; import java.time.LocalDate; import java.time.LocalDateTime; @@ -10,7 +8,6 @@ import java.util.Date; import com.alibaba.excel.util.DateUtils; import lombok.extern.slf4j.Slf4j; -import org.junit.Assert; /** * test util From dbe93e551cdb4c20afcd3e170d9b98eb06ac6c0d Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Thu, 4 May 2023 21:12:43 +0800 Subject: [PATCH 40/53] =?UTF-8?q?=E6=96=B0=E5=A2=9Esince?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/alibaba/excel/metadata/AbstractParameterBuilder.java | 2 ++ .../write/builder/AbstractExcelWriterParameterBuilder.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java index 7dc50c76..24211211 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java @@ -78,6 +78,8 @@ public abstract class AbstractParameterBuilder Date: Thu, 4 May 2023 21:15:24 +0800 Subject: [PATCH 41/53] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/alibaba/excel/util/ClassUtils.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index df9d3683..8007de45 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -1,6 +1,5 @@ package com.alibaba.excel.util; -import java.io.FileWriter; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; @@ -14,7 +13,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.TreeMap; -import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import com.alibaba.excel.annotation.ExcelIgnore; @@ -35,7 +33,6 @@ import com.alibaba.excel.metadata.property.ExcelContentProperty; import com.alibaba.excel.metadata.property.FontProperty; import com.alibaba.excel.metadata.property.NumberFormatProperty; import com.alibaba.excel.metadata.property.StyleProperty; -import com.alibaba.excel.write.metadata.fill.FillWrapper; import com.alibaba.excel.write.metadata.holder.WriteHolder; import lombok.AllArgsConstructor; @@ -274,10 +271,8 @@ public class ClassUtils { /** * Parsing field in the class * - * @param clazz Need to parse the class - * @param needIgnore If you want to ignore fields need to ignore - * @param holder holder - * @param cacheLocation cache lcation + * @param clazz Need to parse the class + * @param configurationHolder configuration */ public static FieldCache declaredFields(Class clazz, ConfigurationHolder configurationHolder) { switch (configurationHolder.globalConfiguration().getFiledCacheLocation()) { @@ -431,7 +426,8 @@ public class ClassUtils { } } - private static Map buildSortedAllFieldMap(Map> orderFieldMap, Map indexFieldMap) { + private static Map buildSortedAllFieldMap(Map> orderFieldMap, + Map indexFieldMap) { Map sortedAllFieldMap = new HashMap<>( (orderFieldMap.size() + indexFieldMap.size()) * 4 / 3 + 1); From 3a2dd02cd87235e00d3ec5ad5b7e8dfcaa7ce10d Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Sat, 6 May 2023 20:54:39 +0800 Subject: [PATCH 42/53] =?UTF-8?q?*=20=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../src/main/java/com/alibaba/excel/util/ClassUtils.java | 2 +- .../java/com/alibaba/easyexcel/test/util/TestFileUtil.java | 2 +- pom.xml | 2 +- update.md | 4 ++++ 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0698bb0a..90b10c07 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析 com.alibaba easyexcel - 3.3.0 + 3.3.1 ``` diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index 8007de45..ae96c45c 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -39,8 +39,8 @@ import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.cglib.beans.BeanMap; -import org.springframework.util.CollectionUtils; /** * Licensed to the Apache Software Foundation (ASF) under one or more diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java index 0e89f275..72c98397 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java @@ -5,7 +5,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; -import org.springframework.util.CollectionUtils; +import org.apache.commons.collections4.CollectionUtils; public class TestFileUtil { diff --git a/pom.xml b/pom.xml index e3cbf50f..926c91bd 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 3.3.0 + 3.3.1 UTF-8 1.8 true diff --git a/update.md b/update.md index 52d78383..3b0b4e95 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,7 @@ +# 3.3.1 + +* 修改版本发布问题 + # 3.3.0 * 读csv会忽略BOM数据 [Issue #3137](https://github.com/alibaba/easyexcel/issues/3137) From ef47d3e9b5c6a22c518fd3c395ef0636dafcf004 Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Thu, 11 May 2023 16:05:39 +0800 Subject: [PATCH 43/53] add @Deprecated annotation and perfect comment --- .../write/builder/AbstractExcelWriterParameterBuilder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java index 5f6e8cad..014f97e2 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java @@ -106,8 +106,9 @@ public abstract class AbstractExcelWriterParameterBuilder includeColumnFieldNames) { parameter().setIncludeColumnFieldNames(includeColumnFieldNames); return self(); From 7841d72f077add6745ef1df452a069cc3dd62394 Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Fri, 12 May 2023 09:37:10 +0800 Subject: [PATCH 44/53] modify mistake error key --- .../src/main/java/com/alibaba/excel/util/ClassUtils.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index ae96c45c..f485d388 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -341,13 +341,11 @@ public class ClassUtils { // The current field needs to be ignored if (writeHolder.ignore(field.getFieldName(), entry.getKey())) { - if (ignoreSet != null) { - ignoreSet.add(field.getFieldName()); - } + ignoreSet.add(field.getFieldName()); indexFieldMap.remove(index); } else { // Mandatory sorted fields - if (ignoreSet.contains(key)) { + if (indexFieldMap.containsKey(key)) { tempSortedFieldMapp.put(key, field); } else { // Need to reorder automatically From 150fb8358737d2f876304a4030ab0b3c58808131 Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Fri, 12 May 2023 09:38:41 +0800 Subject: [PATCH 45/53] revise comment --- .../com/alibaba/excel/util/ClassUtils.java | 61 ++++++++----------- 1 file changed, 26 insertions(+), 35 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index f485d388..c520959e 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -1,20 +1,5 @@ package com.alibaba.excel.util; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.TreeMap; -import java.util.concurrent.ConcurrentHashMap; - import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -34,7 +19,6 @@ import com.alibaba.excel.metadata.property.FontProperty; import com.alibaba.excel.metadata.property.NumberFormatProperty; import com.alibaba.excel.metadata.property.StyleProperty; import com.alibaba.excel.write.metadata.holder.WriteHolder; - import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -42,6 +26,11 @@ import lombok.Setter; import org.apache.commons.collections4.CollectionUtils; import org.springframework.cglib.beans.BeanMap; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -49,7 +38,7 @@ import org.springframework.cglib.beans.BeanMap; * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - * + *

    * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -102,10 +91,11 @@ public class ClassUtils { * @return */ public static ExcelContentProperty declaredExcelContentProperty(Map dataMap, Class headClazz, - String fieldName, ConfigurationHolder configurationHolder) { + String fieldName, + ConfigurationHolder configurationHolder) { Class clazz = null; if (dataMap instanceof BeanMap) { - Object bean = ((BeanMap)dataMap).getBean(); + Object bean = ((BeanMap) dataMap).getBean(); if (bean != null) { clazz = bean.getClass(); } @@ -114,7 +104,7 @@ public class ClassUtils { } private static ExcelContentProperty getExcelContentProperty(Class clazz, Class headClass, String fieldName, - ConfigurationHolder configurationHolder) { + ConfigurationHolder configurationHolder) { switch (configurationHolder.globalConfiguration().getFiledCacheLocation()) { case THREAD_LOCAL: Map contentCacheMap = CONTENT_THREAD_LOCAL.get(); @@ -137,7 +127,8 @@ public class ClassUtils { } private static ExcelContentProperty doGetExcelContentProperty(Class clazz, Class headClass, - String fieldName, ConfigurationHolder configurationHolder) { + String fieldName, + ConfigurationHolder configurationHolder) { ExcelContentProperty excelContentProperty = Optional.ofNullable( declaredFieldContentMap(clazz, configurationHolder)) .map(map -> map.get(fieldName)) @@ -156,7 +147,7 @@ public class ClassUtils { } public static void combineExcelContentProperty(ExcelContentProperty combineExcelContentProperty, - ExcelContentProperty excelContentProperty) { + ExcelContentProperty excelContentProperty) { if (excelContentProperty == null) { return; } @@ -185,7 +176,7 @@ public class ClassUtils { } private static Map declaredFieldContentMap(Class clazz, - ConfigurationHolder configurationHolder) { + ConfigurationHolder configurationHolder) { if (clazz == null) { return null; } @@ -322,7 +313,7 @@ public class ClassUtils { return fieldCache; } - WriteHolder writeHolder = (WriteHolder)configurationHolder; + WriteHolder writeHolder = (WriteHolder) configurationHolder; boolean needIgnore = !CollectionUtils.isEmpty(writeHolder.excludeColumnFieldNames()) || !CollectionUtils.isEmpty(writeHolder.excludeColumnIndexes()) @@ -333,7 +324,7 @@ public class ClassUtils { return fieldCache; } // ignore filed - Map tempSortedFieldMapp = MapUtils.newHashMap(); + Map tempSortedFieldMap = MapUtils.newHashMap(); int index = 0; for (Map.Entry entry : sortedFieldMap.entrySet()) { Integer key = entry.getKey(); @@ -346,18 +337,18 @@ public class ClassUtils { } else { // Mandatory sorted fields if (indexFieldMap.containsKey(key)) { - tempSortedFieldMapp.put(key, field); + tempSortedFieldMap.put(key, field); } else { // Need to reorder automatically // Check whether the current key is already in use - while (tempSortedFieldMapp.containsKey(index)) { + while (tempSortedFieldMap.containsKey(index)) { index++; } - tempSortedFieldMapp.put(index++, field); + tempSortedFieldMap.put(index++, field); } } } - fieldCache.setSortedFieldMap(tempSortedFieldMapp); + fieldCache.setSortedFieldMap(tempSortedFieldMap); // resort field resortField(writeHolder, fieldCache); @@ -365,9 +356,9 @@ public class ClassUtils { } /** - * it only works when {@link WriteHolder#getIncludeColumnFieldNames()} or - * {@link WriteHolder#getIncludeColumnIndexes()} ()} has value - * and {@link WriteHolder#getOrderByIncludeColumn()} ()} is true + * it only works when {@link WriteHolder#includeColumnFieldNames()} or + * {@link WriteHolder#includeColumnIndexes()} has value + * and {@link WriteHolder#orderByIncludeColumn()} is true **/ private static void resortField(WriteHolder writeHolder, FieldCache fieldCache) { if (!writeHolder.orderByIncludeColumn()) { @@ -425,7 +416,7 @@ public class ClassUtils { } private static Map buildSortedAllFieldMap(Map> orderFieldMap, - Map indexFieldMap) { + Map indexFieldMap) { Map sortedAllFieldMap = new HashMap<>( (orderFieldMap.size() + indexFieldMap.size()) * 4 / 3 + 1); @@ -448,8 +439,8 @@ public class ClassUtils { } private static void declaredOneField(Field field, Map> orderFieldMap, - Map indexFieldMap, Set ignoreSet, - ExcelIgnoreUnannotated excelIgnoreUnannotated) { + Map indexFieldMap, Set ignoreSet, + ExcelIgnoreUnannotated excelIgnoreUnannotated) { String fieldName = FieldUtils.resolveCglibFieldName(field); FieldWrapper fieldWrapper = new FieldWrapper(); fieldWrapper.setField(field); From e2a3d6bb07490f45c9a5dd9d051239c60cc90cbb Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Fri, 12 May 2023 09:50:10 +0800 Subject: [PATCH 46/53] reverse import --- .../com/alibaba/excel/util/ClassUtils.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index c520959e..b70a9469 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -1,5 +1,20 @@ package com.alibaba.excel.util; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; + import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -19,6 +34,7 @@ import com.alibaba.excel.metadata.property.FontProperty; import com.alibaba.excel.metadata.property.NumberFormatProperty; import com.alibaba.excel.metadata.property.StyleProperty; import com.alibaba.excel.write.metadata.holder.WriteHolder; + import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -26,11 +42,6 @@ import lombok.Setter; import org.apache.commons.collections4.CollectionUtils; import org.springframework.cglib.beans.BeanMap; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; - /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with From 65aeb150893fc52d55c425f87a85c7b9ed0fd890 Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Fri, 12 May 2023 09:53:09 +0800 Subject: [PATCH 47/53] reverse import --- .../com/alibaba/excel/util/ClassUtils.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index b70a9469..8427b66d 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -102,11 +102,11 @@ public class ClassUtils { * @return */ public static ExcelContentProperty declaredExcelContentProperty(Map dataMap, Class headClazz, - String fieldName, - ConfigurationHolder configurationHolder) { + String fieldName, + ConfigurationHolder configurationHolder) { Class clazz = null; if (dataMap instanceof BeanMap) { - Object bean = ((BeanMap) dataMap).getBean(); + Object bean = ((BeanMap)dataMap).getBean(); if (bean != null) { clazz = bean.getClass(); } @@ -115,7 +115,7 @@ public class ClassUtils { } private static ExcelContentProperty getExcelContentProperty(Class clazz, Class headClass, String fieldName, - ConfigurationHolder configurationHolder) { + ConfigurationHolder configurationHolder) { switch (configurationHolder.globalConfiguration().getFiledCacheLocation()) { case THREAD_LOCAL: Map contentCacheMap = CONTENT_THREAD_LOCAL.get(); @@ -138,8 +138,8 @@ public class ClassUtils { } private static ExcelContentProperty doGetExcelContentProperty(Class clazz, Class headClass, - String fieldName, - ConfigurationHolder configurationHolder) { + String fieldName, + ConfigurationHolder configurationHolder) { ExcelContentProperty excelContentProperty = Optional.ofNullable( declaredFieldContentMap(clazz, configurationHolder)) .map(map -> map.get(fieldName)) @@ -158,7 +158,7 @@ public class ClassUtils { } public static void combineExcelContentProperty(ExcelContentProperty combineExcelContentProperty, - ExcelContentProperty excelContentProperty) { + ExcelContentProperty excelContentProperty) { if (excelContentProperty == null) { return; } @@ -187,7 +187,7 @@ public class ClassUtils { } private static Map declaredFieldContentMap(Class clazz, - ConfigurationHolder configurationHolder) { + ConfigurationHolder configurationHolder) { if (clazz == null) { return null; } @@ -324,7 +324,7 @@ public class ClassUtils { return fieldCache; } - WriteHolder writeHolder = (WriteHolder) configurationHolder; + WriteHolder writeHolder = (WriteHolder)configurationHolder; boolean needIgnore = !CollectionUtils.isEmpty(writeHolder.excludeColumnFieldNames()) || !CollectionUtils.isEmpty(writeHolder.excludeColumnIndexes()) @@ -427,7 +427,7 @@ public class ClassUtils { } private static Map buildSortedAllFieldMap(Map> orderFieldMap, - Map indexFieldMap) { + Map indexFieldMap) { Map sortedAllFieldMap = new HashMap<>( (orderFieldMap.size() + indexFieldMap.size()) * 4 / 3 + 1); @@ -450,8 +450,8 @@ public class ClassUtils { } private static void declaredOneField(Field field, Map> orderFieldMap, - Map indexFieldMap, Set ignoreSet, - ExcelIgnoreUnannotated excelIgnoreUnannotated) { + Map indexFieldMap, Set ignoreSet, + ExcelIgnoreUnannotated excelIgnoreUnannotated) { String fieldName = FieldUtils.resolveCglibFieldName(field); FieldWrapper fieldWrapper = new FieldWrapper(); fieldWrapper.setField(field); From 6bf3b1ec3645118010adf635cf268c69c7f722ea Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Fri, 12 May 2023 09:56:41 +0800 Subject: [PATCH 48/53] reverse import --- .../com/alibaba/excel/util/ClassUtils.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index 8427b66d..92b828b4 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -49,7 +49,7 @@ import org.springframework.cglib.beans.BeanMap; * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - *

    + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -102,8 +102,7 @@ public class ClassUtils { * @return */ public static ExcelContentProperty declaredExcelContentProperty(Map dataMap, Class headClazz, - String fieldName, - ConfigurationHolder configurationHolder) { + String fieldName, ConfigurationHolder configurationHolder) { Class clazz = null; if (dataMap instanceof BeanMap) { Object bean = ((BeanMap)dataMap).getBean(); @@ -138,8 +137,7 @@ public class ClassUtils { } private static ExcelContentProperty doGetExcelContentProperty(Class clazz, Class headClass, - String fieldName, - ConfigurationHolder configurationHolder) { + String fieldName, ConfigurationHolder configurationHolder) { ExcelContentProperty excelContentProperty = Optional.ofNullable( declaredFieldContentMap(clazz, configurationHolder)) .map(map -> map.get(fieldName)) @@ -335,7 +333,7 @@ public class ClassUtils { return fieldCache; } // ignore filed - Map tempSortedFieldMap = MapUtils.newHashMap(); + Map tempSortedFieldMapp = MapUtils.newHashMap(); int index = 0; for (Map.Entry entry : sortedFieldMap.entrySet()) { Integer key = entry.getKey(); @@ -348,18 +346,18 @@ public class ClassUtils { } else { // Mandatory sorted fields if (indexFieldMap.containsKey(key)) { - tempSortedFieldMap.put(key, field); + tempSortedFieldMapp.put(key, field); } else { // Need to reorder automatically // Check whether the current key is already in use - while (tempSortedFieldMap.containsKey(index)) { + while (tempSortedFieldMapp.containsKey(index)) { index++; } - tempSortedFieldMap.put(index++, field); + tempSortedFieldMapp.put(index++, field); } } } - fieldCache.setSortedFieldMap(tempSortedFieldMap); + fieldCache.setSortedFieldMap(tempSortedFieldMapp); // resort field resortField(writeHolder, fieldCache); @@ -559,3 +557,4 @@ public class ClassUtils { CONTENT_THREAD_LOCAL.remove(); } } + From e576f6fec312a622820683d69166dcecc0da2717 Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Tue, 16 May 2023 10:49:40 +0800 Subject: [PATCH 49/53] update parameter name --- .../main/java/com/alibaba/excel/util/ClassUtils.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index 92b828b4..d39abdc1 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -333,7 +333,7 @@ public class ClassUtils { return fieldCache; } // ignore filed - Map tempSortedFieldMapp = MapUtils.newHashMap(); + Map tempSortedFieldMap = MapUtils.newHashMap(); int index = 0; for (Map.Entry entry : sortedFieldMap.entrySet()) { Integer key = entry.getKey(); @@ -346,18 +346,18 @@ public class ClassUtils { } else { // Mandatory sorted fields if (indexFieldMap.containsKey(key)) { - tempSortedFieldMapp.put(key, field); + tempSortedFieldMap.put(key, field); } else { // Need to reorder automatically // Check whether the current key is already in use - while (tempSortedFieldMapp.containsKey(index)) { + while (tempSortedFieldMap.containsKey(index)) { index++; } - tempSortedFieldMapp.put(index++, field); + tempSortedFieldMap.put(index++, field); } } } - fieldCache.setSortedFieldMap(tempSortedFieldMapp); + fieldCache.setSortedFieldMap(tempSortedFieldMap); // resort field resortField(writeHolder, fieldCache); From b7dedeed1fa61821c7c0213a8161e969b04a01fa Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Tue, 16 May 2023 10:57:15 +0800 Subject: [PATCH 50/53] update comment --- .../src/main/java/com/alibaba/excel/util/ClassUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index d39abdc1..f62d1ec9 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -65,7 +65,7 @@ public class ClassUtils { */ public static final ConcurrentHashMap, FieldCache> FIELD_CACHE = new ConcurrentHashMap<>(); /** - * thread local cahe + * thread local cache */ private static final ThreadLocal, FieldCache>> FIELD_THREAD_LOCAL = new ThreadLocal<>(); From 282dd8c237ea3265de04e66521a5830cc096db27 Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Tue, 16 May 2023 11:25:41 +0800 Subject: [PATCH 51/53] update comment --- .../java/com/alibaba/excel/util/ClassUtils.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index f62d1ec9..e1493763 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -36,6 +36,7 @@ import com.alibaba.excel.metadata.property.StyleProperty; import com.alibaba.excel.write.metadata.holder.WriteHolder; import lombok.AllArgsConstructor; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; @@ -49,7 +50,7 @@ import org.springframework.cglib.beans.BeanMap; * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - * + *

    * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -102,7 +103,8 @@ public class ClassUtils { * @return */ public static ExcelContentProperty declaredExcelContentProperty(Map dataMap, Class headClazz, - String fieldName, ConfigurationHolder configurationHolder) { + String fieldName, + ConfigurationHolder configurationHolder) { Class clazz = null; if (dataMap instanceof BeanMap) { Object bean = ((BeanMap)dataMap).getBean(); @@ -137,7 +139,8 @@ public class ClassUtils { } private static ExcelContentProperty doGetExcelContentProperty(Class clazz, Class headClass, - String fieldName, ConfigurationHolder configurationHolder) { + String fieldName, + ConfigurationHolder configurationHolder) { ExcelContentProperty excelContentProperty = Optional.ofNullable( declaredFieldContentMap(clazz, configurationHolder)) .map(map -> map.get(fieldName)) @@ -406,8 +409,8 @@ public class ClassUtils { // Index sorted map Map filedIndexMap = MapUtils.newHashMap(); int fieldIndex = 0; - for (Integer includeColumnIndexe : includeColumnIndexes) { - filedIndexMap.put(includeColumnIndexe, fieldIndex++); + for (Integer includeColumnIndex : includeColumnIndexes) { + filedIndexMap.put(includeColumnIndex, fieldIndex++); } // rebuild sortedFieldMap @@ -551,6 +554,7 @@ public class ClassUtils { private String fieldName; } + public static void removeThreadLocalCache() { FIELD_THREAD_LOCAL.remove(); CLASS_CONTENT_THREAD_LOCAL.remove(); From 67196ba295eee5dcae274d3dba48d1f45808b44c Mon Sep 17 00:00:00 2001 From: gongxuanzhang Date: Tue, 16 May 2023 13:31:28 +0800 Subject: [PATCH 52/53] update cache --- .../com/alibaba/excel/util/ClassUtils.java | 27 +++++++++++++++---- .../easyexcel/test/demo/write/WriteTest.java | 18 ++++++++++++- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index e1493763..d2ac7135 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -64,11 +64,11 @@ public class ClassUtils { /** * memory cache */ - public static final ConcurrentHashMap, FieldCache> FIELD_CACHE = new ConcurrentHashMap<>(); + public static final Map FIELD_CACHE = new ConcurrentHashMap<>(); /** * thread local cache */ - private static final ThreadLocal, FieldCache>> FIELD_THREAD_LOCAL = new ThreadLocal<>(); + private static final ThreadLocal> FIELD_THREAD_LOCAL = new ThreadLocal<>(); /** * The cache configuration information for each of the class @@ -280,16 +280,16 @@ public class ClassUtils { public static FieldCache declaredFields(Class clazz, ConfigurationHolder configurationHolder) { switch (configurationHolder.globalConfiguration().getFiledCacheLocation()) { case THREAD_LOCAL: - Map, FieldCache> fieldCacheMap = FIELD_THREAD_LOCAL.get(); + Map fieldCacheMap = FIELD_THREAD_LOCAL.get(); if (fieldCacheMap == null) { fieldCacheMap = MapUtils.newHashMap(); FIELD_THREAD_LOCAL.set(fieldCacheMap); } - return fieldCacheMap.computeIfAbsent(clazz, key -> { + return fieldCacheMap.computeIfAbsent(new FieldCacheKey(clazz, configurationHolder), key -> { return doDeclaredFields(clazz, configurationHolder); }); case MEMORY: - return FIELD_CACHE.computeIfAbsent(clazz, key -> { + return FIELD_CACHE.computeIfAbsent(new FieldCacheKey(clazz, configurationHolder), key -> { return doDeclaredFields(clazz, configurationHolder); }); case NONE: @@ -554,6 +554,23 @@ public class ClassUtils { private String fieldName; } + @Data + public static class FieldCacheKey { + private Class clazz; + private Collection excludeColumnFieldNames; + private Collection excludeColumnIndexes; + private Collection includeColumnFieldNames; + private Collection includeColumnIndexes; + + FieldCacheKey(Class clazz, ConfigurationHolder configurationHolder) { + this.clazz = clazz; + WriteHolder writeHolder = (WriteHolder)configurationHolder; + this.excludeColumnFieldNames = writeHolder.excludeColumnFieldNames(); + this.excludeColumnIndexes = writeHolder.excludeColumnIndexes(); + this.includeColumnFieldNames = writeHolder.includeColumnFieldNames(); + this.includeColumnIndexes = writeHolder.includeColumnIndexes(); + } + } public static void removeThreadLocalCache() { FIELD_THREAD_LOCAL.remove(); diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java index cd120e22..d224c1d6 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java @@ -4,11 +4,14 @@ import java.io.File; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; +import com.alibaba.easyexcel.test.core.head.ComplexHeadData; +import com.alibaba.easyexcel.test.demo.read.ConverterData; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; @@ -409,7 +412,7 @@ public class WriteTest { /** * 列宽、行高 *

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

    * 2. 使用注解{@link ColumnWidth}、{@link HeadRowHeight}、{@link ContentRowHeight}指定宽度或高度 *

    @@ -703,6 +706,19 @@ public class WriteTest { EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList()); } + @Test + public void sheetCol(){ + String fileName = TestFileUtil.getPath() + "customCol" + System.currentTimeMillis() + ".xlsx"; + try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).includeColumnFieldNames(Arrays.asList("string","date","doubleData")).build()) { + // 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了 + WriteSheet writeSheet = EasyExcel.writerSheet("模板").includeColumnFieldNames(Arrays.asList("string","date")).build(); + excelWriter.write(data(), writeSheet); + writeSheet = EasyExcel.writerSheet(1,"模板1").needHead(false).build(); + // 第二次写如也会创建头,然后在第一次的后面写入数据 + WriteTable string = EasyExcel.writerTable().needHead(true).includeColumnFieldNames(Arrays.asList("string")).build(); + excelWriter.write(data(),writeSheet,string); + } + } private List dataLong() { List list = ListUtils.newArrayList(); for (int i = 0; i < 10; i++) { From aef84b97f16c5bdae51a9e43f22223bf02aaa16e Mon Sep 17 00:00:00 2001 From: wuyiliang Date: Tue, 16 May 2023 19:46:23 +0800 Subject: [PATCH 53/53] [issue#3200]fix ClassCastException --- .../main/java/com/alibaba/excel/util/ClassUtils.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index d2ac7135..f9a53e08 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -564,11 +564,13 @@ public class ClassUtils { FieldCacheKey(Class clazz, ConfigurationHolder configurationHolder) { this.clazz = clazz; - WriteHolder writeHolder = (WriteHolder)configurationHolder; - this.excludeColumnFieldNames = writeHolder.excludeColumnFieldNames(); - this.excludeColumnIndexes = writeHolder.excludeColumnIndexes(); - this.includeColumnFieldNames = writeHolder.includeColumnFieldNames(); - this.includeColumnIndexes = writeHolder.includeColumnIndexes(); + if (configurationHolder instanceof WriteHolder) { + WriteHolder writeHolder = (WriteHolder)configurationHolder; + this.excludeColumnFieldNames = writeHolder.excludeColumnFieldNames(); + this.excludeColumnIndexes = writeHolder.excludeColumnIndexes(); + this.includeColumnFieldNames = writeHolder.includeColumnFieldNames(); + this.includeColumnIndexes = writeHolder.includeColumnIndexes(); + } } }