diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c9da457d..76e5b481 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,25 +19,34 @@ name: Java CI on: [push, pull_request] jobs: - build: + test: runs-on: ubuntu-latest + strategy: + matrix: + java: [ 8, 11, 17] + distribution: [ 'adopt' ] + fail-fast: false + max-parallel: 4 + name: Test JDK ${{ matrix.java }} steps: - uses: actions/checkout@v2 - - name: Set up JDK 8 + - name: Set up JDK uses: actions/setup-java@v2 with: - java-version: '8' - distribution: 'adopt' + java-version: ${{ matrix.java }} + distribution: ${{ matrix.distribution }} - name: Cache Maven - uses: actions/cache@v2.1.6 + uses: actions/cache@v2 with: path: ~/.m2 key: m2 restore-keys: m2 - name: Chmod run: chmod +x mvnw + - name: Test with Maven + run: ./mvnw test -B -Dmaven.test.skip=false - name: Maven Build - run: ./mvnw install -B -V -Dmaven.test.skip=true + run: ./mvnw install -B -V - name: Java Doc run: ./mvnw javadoc:javadoc diff --git a/.gitignore b/.gitignore index fac9ab5f..93472b7d 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ target/ *.iws antx.properties output/ +.flattened-pom.xml +dependency-reduced-pom.xml diff --git a/.mvn/jvm.config b/.mvn/jvm.config deleted file mode 100644 index f432c960..00000000 --- a/.mvn/jvm.config +++ /dev/null @@ -1 +0,0 @@ --Xmx1536m \ No newline at end of file diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar index e89f07c2..c1dd12f1 100644 Binary files a/.mvn/wrapper/maven-wrapper.jar and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index bdc03cb2..e83fa695 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -1,2 +1,18 @@ -distributionUrl=https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.3/maven-wrapper-0.5.3.jar \ No newline at end of file +# 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. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar diff --git a/README.md b/README.md index 4c0f299f..ca1c4c36 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,31 @@ Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都 当然还有极速模式能更快,但是内存占用会在100M多一点 ![img](img/readme/large.png) -## 版本支持 -* 2+ 版本支持 Java7和Java6 -* 3+ 版本至少 Java8 +## 关于版本选择 +如果项目中没有使用过poi,且jdk版本在8-17之间,直接使用最新版本,别犹豫。以下表格适用于不满足以上2个情况的。 + +| 版本 | poi依赖版本 (支持范围) | jdk版本支持范围 | 备注 | +|--------------------|-----------------------|--------------|---------------------------------------------| +| 3.1.0+ | 4.1.2 (4.1.2 - 5.2.2) | jkd8 - jdk17 | 推荐使用,会更新的版本 | +| 3.0.0-beta1 - 3.0.5 | 4.1.2 (4.1.2 - 5.2.2) | jkd8 - jdk11 | 不推荐项目新引入此版本,除非超级严重bug,否则不再更新 | +| 2.0.0-beta1-2.2.11 | 3.17 (3.17 - 4.1.2) | jdk6 - jdk11 | 不推荐项目新引入此版本,除非是jdk6否则不推荐使用,除非超级严重bug,否则不再更新 | +| 1+版本 | 3.17 (3.17 - 4.1.2) | jdk6 - jdk11 | 不推荐项目新引入此版本,超级严重bug,也不再更新 | + +注意: 3+版本的的easyexcel,使用poi 5+版本时,需要手动排除:poi-ooxml-schemas,例如: +```xml + + com.alibaba + easyexcel + 3.1.0 + + + poi-ooxml-schemas + org.apache.poi + + + +``` + ### 关于版本升级 * 不建议跨大版本升级 尤其跨2个大版本 * 2+ 升级到 3+ 一些不兼容的地方 @@ -43,7 +65,7 @@ Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都 com.alibaba easyexcel - 3.0.5 + 3.1.0 ``` @@ -67,7 +89,7 @@ Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都 姬朋飞(玉霄)、庄家钜、怀宇 ## 快速开始 ### 读Excel -DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/demo/read/ReadTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java) +DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/demo/read/ReadTest.java](/easyexcel-core/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java) ```java /** @@ -85,7 +107,7 @@ DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/ja ``` ### 写Excel -DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java) +DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java](/easyexcel-core/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java) ```java /** * 最简单的写 @@ -102,7 +124,7 @@ DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/ja ``` ### web上传、下载 -DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java) +DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java](/easyexcel-core/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java) ```java /** * 文件下载(失败了会返回一个有部分数据的Excel) diff --git a/README_EN.md b/README_EN.md new file mode 100644 index 00000000..ae787bbb --- /dev/null +++ b/README_EN.md @@ -0,0 +1,156 @@ +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) +[![Maven central](https://maven-badges.herokuapp.com/maven-central/com.alibaba/easyexcel/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.alibaba/easyexcel) +[![License](http://img.shields.io/:license-apache-brightgreen.svg)](http://www.apache.org/licenses/LICENSE-2.0.html) + +[Communication Group 1 in QQ(Full): 662022184](https://jq.qq.com/?_wv=1027&k=1T21jJxh) +[Communication Group 2 in QQ(Full): 1097936804](https://jq.qq.com/?_wv=1027&k=j5zEy6Xl) +[Communication Group 3 in QQ(Full): 453928496](https://qm.qq.com/cgi-bin/qm/qr?k=e2ULsA5A0GldhV2CXJ8sIbAyu9I6qqs7&jump_from=webapi) +[Communication Group 4 in QQ: 496594404](https://qm.qq.com/cgi-bin/qm/qr?k=e_aVG1Q7gi0PJUBkbrUGAgbeO3kUEInK&jump_from=webapi) +[Communication Group 1 in DingTalk(Full): 21960511](https://qr.dingtalk.com/action/joingroup?code=v1,k1,cchz6k12ci9B08NNqhNRFGXocNVHrZtW0kaOtTKg/Rk=&_dt_no_comment=1&origin=11) +[Communication Group 2 in DingTalk(Full): 32796397](https://qr.dingtalk.com/action/joingroup?code=v1,k1,jyU9GtEuNU5S0QTyklqYcYJ8qDZtUuTPMM7uPZTS8Hs=&_dt_no_comment=1&origin=11) +[Communication Group 3 in DingTalk(Full): 33797247](https://qr.dingtalk.com/action/joingroup?code=v1,k1,3UGlEScTGQaHpW2cIRo+gkxJ9EVZ5fz26M6nW3uFP30=&_dt_no_comment=1&origin=11) +[Communication Group 4 in DingTalk(Full): 33491624](https://qr.dingtalk.com/action/joingroup?code=v1,k1,V14Pb65Too70rQkEaJ9ohb6lZBZbtp6jIL/q9EWh9vA=&_dt_no_comment=1&origin=11) +[Communication Group 5 in DingTalk: 32134498](https://h5.dingtalk.com/circle/healthCheckin.html?dtaction=os&corpId=dingb9fa1325d9dccc3ecac589edd02f1650&5233a=71a83&cbdbhh=qwertyuiop) +[Official Website: https://yuque.com/easyexcel](https://www.yuque.com/easyexcel/doc/easyexcel) + +[FAQ](https://www.yuque.com/easyexcel/faq) +#### It is recommended to join a DingTalk group + +# EasyExcel, a java toolkit for parsing Excel easily +There are several java frameworks or toolkit which can parse and generate Excel, such as Apache POI or jxl. But they all have some difficulties to handle problems like excessive memory usage. Apache POI framework has a set of SAX mode API can fix some memory overflow problems at some extent, but it still has some flaws. For example, the unzipping and the storage of the unzipping of Excel file in version 07 are done in memory, so the memory consumption is still very high. The EasyExcel toolkit rewrites the logic of POI for parsing Excel version 07. One 3 megabytes Excel file parsed with POI still requires about 100M memory, which can be reduced to a few megabyte by using EasyExcel instead. And yes, there is no memory overflow for even larger excel with EasyExcel. EasyExcel version 03 depends on POI SAX model and does model transformation/encapsulation in the upper layer to make it simpler and more convenient for users. + +## Using EasyExcel version 3.0.2+, a machine with 64M RAM can read a 75 megabyte Excel file containing 460,000 rows and 25 columns in 20 seconds +Of course, there is also a very fast mode can be faster, but the memory consumption will be a little more than 100M +![img](img/readme/large.png) + +## Version support +* EasyExcel version 2+ works on Java7 or Java6 +* EasyExcel version 3+ works on Java8 or java8+ +### About version upgrade +* It is not recommended upgrading across major versions, especially across 2 major versions. +* There are some incompatibilities in upgrading from version 2+ to version 3+. + * Using a custom interceptor to modify the style can cause problems, even if it does not compile with errors. + * When reading the Excel file, the `invoke` function will throw an exception, there will not be an additional layer of `ExcelAnalysisException` wrapped here, and it will not compile with errors. + * Style and other annotations involving `boolean` or some enumeration values have been changed, adding the default value. The compiler will report an error, just change the annotation. +* It is recommended to re-test the relevant functions after upgrading across major versions. + +### Latest Version +```xml + + com.alibaba + easyexcel + 3.0.2 + +``` + +## Advertising space +### Alibaba New Retail Business Department Recruitment +Alibaba New Retail Business Department sincerely recruit JAVA senior development, technical experts. If you are interested, you can contact us by WeChat, or send your Resume to my email jipengfei.jpf@alibaba-inc.com. +### EasyExcel personnel recruitment +Anyone who wants to participate in this project can apply, mainly responsible for answering questions in the communication group and dealing with the issues. Of course, you can also do some PR. +Since there is no material reward for participating in the open source project, and the current maintainers are also maintaining the project in their spare time. So people who want to join this project need to be persistent, not just on a whim. +The requirements are as follows: +* There are certain java coding skills & good coding habits +* Understand the read&write principles of EasyExcel +* Has passion for open source projects +* Be able to do things consistently for a long time +* Your job is not so busy + +## Related Documents +* [Quick Start](https://www.yuque.com/easyexcel/doc/easyexcel) +* [About Us](/abouteasyexcel.md) +* [Update Notes](/update.md) +* [Code Contribution](https://www.yuque.com/easyexcel/doc/contribute) + +## Maintainers +姬朋飞(玉霄)、庄家钜、怀宇 +## Quick Start +### Read Excel File +DEMO:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/demo/read/ReadTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java) + +```java + /** + * The easiest way to read Excel file using EasyExcel toolkit + * + *

+ * 1. Create an entity object, such as {@link DemoData}, each property of the entity object corresponds to a specific field in any row of Excel. + * 2. When reading each row of an Excel file, create a callback listener for the corresponding row. Refer to{@link DemoDataListener} + * 3. Invoke the read function + *

+ */ + @Test + public void simpleRead() { + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // Specify which entity object class to use to read the Excel content. The file stream will close automatically after reading the first sheet of Excel. + EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead(); + } +``` + +### Write Excel File +DEMO:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java) +```java + /** + * The easiest way to write Excel file using EasyExcel toolkit + * + *

+ * 1. Create an entity object, refer to{@link com.alibaba.easyexcel.test.demo.write.DemoData}. + * Each property of the entity object corresponds to a specific field of Excel + * 2. Invoke write function + *

+ */ + @Test + public void simpleWrite() { + String fileName = TestFileUtil.getPath() + "write" + System.currentTimeMillis() + ".xlsx"; + // Specify which entity object class to use to write Excel, it will write to the first sheet of Excel with the name template. Then the file stream will be closed automatically. + // With version 03, just pass in the excelType parameter + EasyExcel.write(fileName, DemoData.class).sheet("template").doWrite(data()); + } +``` + +### File Uploading&Downloading +DEMO:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java) +```java + /** + * File downloading + * + * Note: returns an Excel with partial data if it fails + * + *

+ * 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. + *

+ */ + @GetMapping("download") + public void download(HttpServletResponse response) throws IOException { + // Using swagger may cause some problems, please use your browser directly or use postman to invoke this + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + // URLEncoder.encode function can prevent Chinese garbled code + String fileName = URLEncoder.encode("test", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + EasyExcel.write(response.getOutputStream(), DownloadData.class).sheet("template").doWrite(data()); + } + + /** + * File uploading + * + *

+ * 1. Create an entity object, refer to{@link UploadData} + * Each property of the entity object corresponds to a specific field of Excel + * 2. When reading each row of an Excel file, create a callback listener for the corresponding row. Refer to{@link UploadDataListener} + * 3. Invoke read function + *

+ */ + @PostMapping("upload") + @ResponseBody + public String upload(MultipartFile file) throws IOException { + EasyExcel.read(file.getInputStream(), UploadData.class, new UploadDataListener(uploadDAO)).sheet().doRead(); + return "success"; + } +``` +### Contact Us +If you have any questions, Alibaba colleagues can find me in DingTalk, and others can leave messages here. All related questions are well welcomed. diff --git a/easyexcel-core/pom.xml b/easyexcel-core/pom.xml new file mode 100644 index 00000000..4f03d716 --- /dev/null +++ b/easyexcel-core/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + + com.alibaba + easyexcel-parent + ${revision} + ../pom.xml + + + jar + easyexcel-core + + + + com.alibaba + easyexcel-support + + + org.apache.poi + poi + + + org.apache.poi + poi-ooxml + + + org.apache.poi + poi-ooxml-schemas + + + org.apache.commons + commons-csv + + + org.ehcache + ehcache + + + diff --git a/src/main/java/com/alibaba/excel/EasyExcel.java b/easyexcel-core/src/main/java/com/alibaba/excel/EasyExcel.java similarity index 100% rename from src/main/java/com/alibaba/excel/EasyExcel.java rename to easyexcel-core/src/main/java/com/alibaba/excel/EasyExcel.java diff --git a/src/main/java/com/alibaba/excel/EasyExcelFactory.java b/easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java similarity index 100% rename from src/main/java/com/alibaba/excel/EasyExcelFactory.java rename to easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java diff --git a/src/main/java/com/alibaba/excel/ExcelReader.java b/easyexcel-core/src/main/java/com/alibaba/excel/ExcelReader.java similarity index 80% rename from src/main/java/com/alibaba/excel/ExcelReader.java rename to easyexcel-core/src/main/java/com/alibaba/excel/ExcelReader.java index a1a9c50d..9508d941 100644 --- a/src/main/java/com/alibaba/excel/ExcelReader.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/ExcelReader.java @@ -1,5 +1,6 @@ package com.alibaba.excel; +import java.io.Closeable; import java.util.Arrays; import java.util.List; @@ -10,21 +11,17 @@ import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.read.metadata.ReadSheet; import com.alibaba.excel.read.metadata.ReadWorkbook; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * Excel readers are all read in event mode. * * @author jipengfei */ -public class ExcelReader { - private static final Logger LOGGER = LoggerFactory.getLogger(ExcelReader.class); +public class ExcelReader implements Closeable { /** * Analyser */ - private ExcelAnalyser excelAnalyser; + private final ExcelAnalyser excelAnalyser; public ExcelReader(ReadWorkbook readWorkbook) { excelAnalyser = new ExcelAnalyserImpl(readWorkbook); @@ -50,8 +47,7 @@ public class ExcelReader { /** * Parse the specified sheet,SheetNo start from 0 * - * @param readSheet - * Read sheet + * @param readSheet Read sheet */ public ExcelReader read(ReadSheet... readSheet) { return read(Arrays.asList(readSheet)); @@ -68,7 +64,6 @@ public class ExcelReader { return this; } - /** * Context for the entire execution process * @@ -88,7 +83,6 @@ public class ExcelReader { } /** - * * @return * @deprecated please use {@link #analysisContext()} */ @@ -106,17 +100,8 @@ public class ExcelReader { } } - /** - * Prevents calls to {@link #finish} from freeing the cache - * - */ @Override - protected void finalize() { - try { - finish(); - } catch (Throwable e) { - LOGGER.warn("Destroy object failed", e); - } + public void close() { + finish(); } - } diff --git a/src/main/java/com/alibaba/excel/ExcelWriter.java b/easyexcel-core/src/main/java/com/alibaba/excel/ExcelWriter.java similarity index 89% rename from src/main/java/com/alibaba/excel/ExcelWriter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/ExcelWriter.java index bfdf2f26..95d5446b 100644 --- a/src/main/java/com/alibaba/excel/ExcelWriter.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/ExcelWriter.java @@ -1,5 +1,6 @@ package com.alibaba.excel; +import java.io.Closeable; import java.util.Collection; import java.util.function.Supplier; @@ -11,9 +12,6 @@ import com.alibaba.excel.write.metadata.WriteTable; import com.alibaba.excel.write.metadata.WriteWorkbook; import com.alibaba.excel.write.metadata.fill.FillConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * Excel Writer This tool is used to write value out to Excel via POI. This object can perform the following two * functions. @@ -25,10 +23,9 @@ import org.slf4j.LoggerFactory; * * @author jipengfei */ -public class ExcelWriter { - private static final Logger LOGGER = LoggerFactory.getLogger(ExcelWriter.class); +public class ExcelWriter implements Closeable { - private ExcelBuilder excelBuilder; + private final ExcelBuilder excelBuilder; /** * Create new writer @@ -144,18 +141,6 @@ public class ExcelWriter { } } - /** - * Prevents calls to {@link #finish} from freeing the cache - */ - @Override - protected void finalize() { - try { - finish(); - } catch (Throwable e) { - LOGGER.warn("Destroy object failed", e); - } - } - /** * The context of the entire writing process * @@ -164,4 +149,9 @@ public class ExcelWriter { public WriteContext writeContext() { return excelBuilder.writeContext(); } + + @Override + public void close() { + finish(); + } } diff --git a/src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyser.java diff --git a/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java similarity index 94% rename from src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java index 743daab9..05d4fa84 100644 --- a/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java @@ -18,6 +18,7 @@ import com.alibaba.excel.exception.ExcelAnalysisStopException; import com.alibaba.excel.read.metadata.ReadSheet; import com.alibaba.excel.read.metadata.ReadWorkbook; import com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder; +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; @@ -171,6 +172,18 @@ public class ExcelAnalyserImpl implements ExcelAnalyser { } catch (Throwable t) { throwable = t; } + + // close csv. + // https://github.com/alibaba/easyexcel/issues/2309 + try { + if ((readWorkbookHolder instanceof CsvReadWorkbookHolder) + && ((CsvReadWorkbookHolder)readWorkbookHolder).getCsvParser() != null) { + ((CsvReadWorkbookHolder)readWorkbookHolder).getCsvParser().close(); + } + } catch (Throwable t) { + throwable = t; + } + try { if (analysisContext.readWorkbookHolder().getAutoCloseStream() && readWorkbookHolder.getInputStream() != null) { diff --git a/src/main/java/com/alibaba/excel/analysis/ExcelReadExecutor.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelReadExecutor.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/ExcelReadExecutor.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelReadExecutor.java diff --git a/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java similarity index 78% rename from src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java index d411ef0d..a1b7625d 100644 --- a/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/csv/CsvExcelReadExecutor.java @@ -1,8 +1,8 @@ package com.alibaba.excel.analysis.csv; -import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; @@ -25,6 +25,7 @@ import com.alibaba.excel.util.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; /** @@ -35,8 +36,8 @@ import org.apache.commons.csv.CSVRecord; @Slf4j public class CsvExcelReadExecutor implements ExcelReadExecutor { - private List sheetList; - private CsvReadContext csvReadContext; + private final List sheetList; + private final CsvReadContext csvReadContext; public CsvExcelReadExecutor(CsvReadContext csvReadContext) { this.csvReadContext = csvReadContext; @@ -53,9 +54,10 @@ public class CsvExcelReadExecutor implements ExcelReadExecutor { @Override public void execute() { - Iterable parseRecords; + CSVParser csvParser; try { - parseRecords = parseRecords(); + csvParser = csvParser(); + csvReadContext.csvReadWorkbookHolder().setCsvParser(csvParser); } catch (IOException e) { throw new ExcelAnalysisException(e); } @@ -68,7 +70,7 @@ public class CsvExcelReadExecutor implements ExcelReadExecutor { int rowIndex = 0; - for (CSVRecord record : parseRecords) { + for (CSVRecord record : csvParser) { dealRecord(record, rowIndex++); } @@ -77,23 +79,27 @@ public class CsvExcelReadExecutor implements ExcelReadExecutor { } } - private Iterable parseRecords() throws IOException { + private CSVParser csvParser() throws IOException { CsvReadWorkbookHolder csvReadWorkbookHolder = csvReadContext.csvReadWorkbookHolder(); CSVFormat csvFormat = csvReadWorkbookHolder.getCsvFormat(); if (csvReadWorkbookHolder.getMandatoryUseInputStream()) { - return csvFormat.parse(new InputStreamReader(csvReadWorkbookHolder.getInputStream())); + return csvFormat.parse( + new InputStreamReader(csvReadWorkbookHolder.getInputStream(), csvReadWorkbookHolder.getCharset())); } if (csvReadWorkbookHolder.getFile() != null) { - return csvFormat.parse(new FileReader(csvReadWorkbookHolder.getFile())); + return csvFormat.parse(new InputStreamReader(Files.newInputStream(csvReadWorkbookHolder.getFile().toPath()), + csvReadWorkbookHolder.getCharset())); } - return csvFormat.parse(new InputStreamReader(csvReadWorkbookHolder.getInputStream())); + return csvFormat.parse( + new InputStreamReader(csvReadWorkbookHolder.getInputStream(), csvReadWorkbookHolder.getCharset())); } private void dealRecord(CSVRecord record, int rowIndex) { Map cellMap = new LinkedHashMap<>(); Iterator cellIterator = record.iterator(); int columnIndex = 0; + Boolean autoTrim = csvReadContext.currentReadHolder().globalConfiguration().getAutoTrim(); while (cellIterator.hasNext()) { String cellString = cellIterator.next(); ReadCellData readCellData = new ReadCellData<>(); @@ -103,7 +109,7 @@ public class CsvExcelReadExecutor implements ExcelReadExecutor { // csv is an empty string of whether ,, is read or ,"", if (StringUtils.isNotBlank(cellString)) { readCellData.setType(CellDataTypeEnum.STRING); - readCellData.setStringValue(cellString); + readCellData.setStringValue(autoTrim ? cellString.trim() : cellString); } else { readCellData.setType(CellDataTypeEnum.EMPTY); } diff --git a/src/main/java/com/alibaba/excel/analysis/v03/IgnorableXlsRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/IgnorableXlsRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/IgnorableXlsRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/IgnorableXlsRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/XlsListSheetListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsListSheetListener.java similarity index 98% rename from src/main/java/com/alibaba/excel/analysis/v03/XlsListSheetListener.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsListSheetListener.java index cfdc6bee..14565e5e 100644 --- a/src/main/java/com/alibaba/excel/analysis/v03/XlsListSheetListener.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsListSheetListener.java @@ -25,7 +25,7 @@ import com.alibaba.excel.exception.ExcelAnalysisException; * @author Jiaju Zhuang */ public class XlsListSheetListener implements HSSFListener { - private XlsReadContext xlsReadContext; + private final XlsReadContext xlsReadContext; private static final Map XLS_RECORD_HANDLER_MAP = new HashMap(); static { diff --git a/src/main/java/com/alibaba/excel/analysis/v03/XlsRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/XlsRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java similarity index 98% rename from src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java index 83f98647..e1a303b1 100644 --- a/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java @@ -11,7 +11,6 @@ import org.apache.poi.hssf.eventusermodel.HSSFEventFactory; import org.apache.poi.hssf.eventusermodel.HSSFListener; import org.apache.poi.hssf.eventusermodel.HSSFRequest; import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener; -import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord; import org.apache.poi.hssf.record.BOFRecord; import org.apache.poi.hssf.record.BlankRecord; import org.apache.poi.hssf.record.BoolErrRecord; @@ -78,7 +77,7 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { private static final Logger LOGGER = LoggerFactory.getLogger(XlsSaxAnalyser.class); private static final short DUMMY_RECORD_SID = -1; - private XlsReadContext xlsReadContext; + private final XlsReadContext xlsReadContext; private static final Map XLS_RECORD_HANDLER_MAP = new HashMap(32); static { diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/BlankRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BlankRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/BlankRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BlankRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/BofRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BofRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/BofRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BofRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoolErrRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoolErrRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/BoolErrRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoolErrRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoundSheetRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoundSheetRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/BoundSheetRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BoundSheetRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/DummyRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/DummyRecordHandler.java similarity index 85% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/DummyRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/DummyRecordHandler.java index 8ecc33a4..b5c853c5 100644 --- a/src/main/java/com/alibaba/excel/analysis/v03/handlers/DummyRecordHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/DummyRecordHandler.java @@ -34,7 +34,10 @@ public class DummyRecordHandler extends AbstractXlsRecordHandler implements Igno xlsReadSheetHolder.setTempRowType(RowTypeEnum.EMPTY); } else if (record instanceof MissingCellDummyRecord) { MissingCellDummyRecord mcdr = (MissingCellDummyRecord)record; - xlsReadSheetHolder.getCellMap().put(mcdr.getColumn(), + // https://github.com/alibaba/easyexcel/issues/2236 + // Some abnormal XLS, in the case of data already exist, or there will be a "MissingCellDummyRecord" + // records, so if the existing data, empty data is ignored + xlsReadSheetHolder.getCellMap().putIfAbsent(mcdr.getColumn(), ReadCellData.newEmptyInstance(mcdr.getRow(), mcdr.getColumn())); } } diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java similarity index 95% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java index 32b5b882..448dcb49 100644 --- a/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java @@ -2,7 +2,6 @@ package com.alibaba.excel.analysis.v03.handlers; import java.util.LinkedHashMap; -import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord; import org.apache.poi.hssf.record.Record; import com.alibaba.excel.analysis.v03.IgnorableXlsRecordHandler; diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java similarity index 98% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java index f5d7ff0a..09188cb2 100644 --- a/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/FormulaRecordHandler.java @@ -64,6 +64,7 @@ public class FormulaRecordHandler extends AbstractXlsRecordHandler implements Ig dataFormatData.setFormat(BuiltinFormats.getBuiltinFormat(dataFormatData.getIndex(), xlsReadContext.xlsReadWorkbookHolder().getFormatTrackingHSSFListener().getFormatString(frec), xlsReadContext.readSheetHolder().getGlobalConfiguration().getLocale())); + tempCellData.setDataFormatData(dataFormatData); cellMap.put((int)frec.getColumn(), tempCellData); break; case ERROR: diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/HyperlinkRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/HyperlinkRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/HyperlinkRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/HyperlinkRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/IndexRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/IndexRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/IndexRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/IndexRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelSstRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelSstRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelSstRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/LabelSstRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/MergeCellsRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/MergeCellsRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/MergeCellsRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/MergeCellsRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/NoteRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/NoteRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/NoteRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/NoteRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/NumberRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/ObjRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/ObjRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/ObjRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/ObjRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/RkRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/RkRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/RkRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/RkRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/SstRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/SstRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/SstRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/SstRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/StringRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/StringRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/StringRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/StringRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/TextObjectRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/TextObjectRecordHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v03/handlers/TextObjectRecordHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/TextObjectRecordHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java similarity index 93% rename from src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java index ea8b87b1..38918fb8 100644 --- a/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java @@ -52,13 +52,13 @@ import org.xml.sax.XMLReader; @Slf4j public class XlsxSaxAnalyser implements ExcelReadExecutor { - private XlsxReadContext xlsxReadContext; - private List sheetList; - private Map sheetMap; + private final XlsxReadContext xlsxReadContext; + private final List sheetList; + private final Map sheetMap; /** * excel comments key: sheetNo value: CommentsTable */ - private Map commentsTableMap; + private final Map commentsTableMap; public XlsxSaxAnalyser(XlsxReadContext xlsxReadContext, InputStream decryptedStream) throws Exception { this.xlsxReadContext = xlsxReadContext; @@ -188,9 +188,15 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor { } else { saxFactory = SAXParserFactory.newInstance(xlsxSAXParserFactoryName, null); } - saxFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - saxFactory.setFeature("http://xml.org/sax/features/external-general-entities", false); - saxFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + try { + saxFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + } catch (Throwable ignore) {} + try { + saxFactory.setFeature("http://xml.org/sax/features/external-general-entities", false); + } catch (Throwable ignore) {} + try { + saxFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + } catch (Throwable ignore) {} SAXParser saxParser = saxFactory.newSAXParser(); XMLReader xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(handler); diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractXlsxTagHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractXlsxTagHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractXlsxTagHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractXlsxTagHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellFormulaTagHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellFormulaTagHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/CellFormulaTagHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellFormulaTagHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellInlineStringValueTagHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellInlineStringValueTagHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/CellInlineStringValueTagHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellInlineStringValueTagHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellTagHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellTagHandler.java similarity index 96% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/CellTagHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellTagHandler.java index 9d8e4736..ce84d5e2 100644 --- a/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellTagHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellTagHandler.java @@ -100,6 +100,8 @@ public class CellTagHandler extends AbstractXlsxTagHandler { } tempCellData.checkEmpty(); + tempCellData.setRowIndex(xlsxReadSheetHolder.getRowIndex()); + tempCellData.setColumnIndex(xlsxReadSheetHolder.getColumnIndex()); xlsxReadSheetHolder.getCellMap().put(xlsxReadSheetHolder.getColumnIndex(), tempCellData); } } diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellValueTagHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellValueTagHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/CellValueTagHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellValueTagHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/CountTagHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CountTagHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/CountTagHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/CountTagHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/HyperlinkTagHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/HyperlinkTagHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/HyperlinkTagHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/HyperlinkTagHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/MergeCellTagHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/MergeCellTagHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/MergeCellTagHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/MergeCellTagHandler.java diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/RowTagHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/RowTagHandler.java similarity index 74% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/RowTagHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/RowTagHandler.java index 37965254..51c192ca 100644 --- a/src/main/java/com/alibaba/excel/analysis/v07/handlers/RowTagHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/RowTagHandler.java @@ -4,8 +4,10 @@ import java.util.LinkedHashMap; import com.alibaba.excel.constant.ExcelXmlConstants; import com.alibaba.excel.context.xlsx.XlsxReadContext; +import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.enums.RowTypeEnum; import com.alibaba.excel.metadata.Cell; +import com.alibaba.excel.metadata.data.ReadCellData; import com.alibaba.excel.read.metadata.holder.ReadRowHolder; import com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder; import com.alibaba.excel.util.PositionUtils; @@ -41,6 +43,24 @@ public class RowTagHandler extends AbstractXlsxTagHandler { public void endElement(XlsxReadContext xlsxReadContext, String name) { XlsxReadSheetHolder xlsxReadSheetHolder = xlsxReadContext.xlsxReadSheetHolder(); RowTypeEnum rowType = MapUtils.isEmpty(xlsxReadSheetHolder.getCellMap()) ? RowTypeEnum.EMPTY : RowTypeEnum.DATA; + // It's possible that all of the cells in the row are empty + if (rowType == RowTypeEnum.DATA) { + boolean hasData = false; + for (Cell cell : xlsxReadSheetHolder.getCellMap().values()) { + if (!(cell instanceof ReadCellData)) { + hasData = true; + break; + } + ReadCellData readCellData = (ReadCellData)cell; + if (readCellData.getType() != CellDataTypeEnum.EMPTY) { + hasData = true; + break; + } + } + if (!hasData) { + rowType = RowTypeEnum.EMPTY; + } + } xlsxReadContext.readRowHolder(new ReadRowHolder(xlsxReadSheetHolder.getRowIndex(), rowType, xlsxReadSheetHolder.getGlobalConfiguration(), xlsxReadSheetHolder.getCellMap())); xlsxReadContext.analysisEventProcessor().endRow(xlsxReadContext); diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/XlsxTagHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/XlsxTagHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/XlsxTagHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/XlsxTagHandler.java diff --git a/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 similarity index 98% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java index ea6ffc58..f4514e43 100644 --- a/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 @@ -27,7 +27,7 @@ public class SharedStringsTableHandler extends DefaultHandler { */ private StringBuilder currentElementData; - private ReadCache readCache; + private final ReadCache readCache; /** * Some fields in the T tag need to be ignored */ diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java similarity index 98% rename from src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java index 869ef3cb..61805cd5 100644 --- a/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/handlers/sax/XlsxRowHandler.java @@ -25,7 +25,7 @@ import org.xml.sax.helpers.DefaultHandler; */ @Slf4j public class XlsxRowHandler extends DefaultHandler { - private XlsxReadContext xlsxReadContext; + private final XlsxReadContext xlsxReadContext; private static final Map XLSX_CELL_HANDLER_MAP = new HashMap(32); static { diff --git a/src/main/java/com/alibaba/excel/annotation/ExcelIgnore.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelIgnore.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/ExcelIgnore.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelIgnore.java diff --git a/src/main/java/com/alibaba/excel/annotation/ExcelIgnoreUnannotated.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelIgnoreUnannotated.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/ExcelIgnoreUnannotated.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelIgnoreUnannotated.java diff --git a/src/main/java/com/alibaba/excel/annotation/ExcelProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelProperty.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/ExcelProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/ExcelProperty.java diff --git a/src/main/java/com/alibaba/excel/annotation/format/DateTimeFormat.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/format/DateTimeFormat.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/format/DateTimeFormat.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/format/DateTimeFormat.java diff --git a/src/main/java/com/alibaba/excel/annotation/format/NumberFormat.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/format/NumberFormat.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/format/NumberFormat.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/format/NumberFormat.java diff --git a/src/main/java/com/alibaba/excel/annotation/write/style/ColumnWidth.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ColumnWidth.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/write/style/ColumnWidth.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ColumnWidth.java diff --git a/src/main/java/com/alibaba/excel/annotation/write/style/ContentFontStyle.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentFontStyle.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/write/style/ContentFontStyle.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentFontStyle.java diff --git a/src/main/java/com/alibaba/excel/annotation/write/style/ContentLoopMerge.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentLoopMerge.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/write/style/ContentLoopMerge.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentLoopMerge.java diff --git a/src/main/java/com/alibaba/excel/annotation/write/style/ContentRowHeight.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentRowHeight.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/write/style/ContentRowHeight.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentRowHeight.java diff --git a/src/main/java/com/alibaba/excel/annotation/write/style/ContentStyle.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentStyle.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/write/style/ContentStyle.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/ContentStyle.java diff --git a/src/main/java/com/alibaba/excel/annotation/write/style/HeadFontStyle.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadFontStyle.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/write/style/HeadFontStyle.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadFontStyle.java diff --git a/src/main/java/com/alibaba/excel/annotation/write/style/HeadRowHeight.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadRowHeight.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/write/style/HeadRowHeight.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadRowHeight.java diff --git a/src/main/java/com/alibaba/excel/annotation/write/style/HeadStyle.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadStyle.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/write/style/HeadStyle.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/HeadStyle.java diff --git a/src/main/java/com/alibaba/excel/annotation/write/style/OnceAbsoluteMerge.java b/easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/OnceAbsoluteMerge.java similarity index 100% rename from src/main/java/com/alibaba/excel/annotation/write/style/OnceAbsoluteMerge.java rename to easyexcel-core/src/main/java/com/alibaba/excel/annotation/write/style/OnceAbsoluteMerge.java diff --git a/src/main/java/com/alibaba/excel/cache/Ehcache.java b/easyexcel-core/src/main/java/com/alibaba/excel/cache/Ehcache.java similarity index 100% rename from src/main/java/com/alibaba/excel/cache/Ehcache.java rename to easyexcel-core/src/main/java/com/alibaba/excel/cache/Ehcache.java diff --git a/src/main/java/com/alibaba/excel/cache/MapCache.java b/easyexcel-core/src/main/java/com/alibaba/excel/cache/MapCache.java similarity index 92% rename from src/main/java/com/alibaba/excel/cache/MapCache.java rename to easyexcel-core/src/main/java/com/alibaba/excel/cache/MapCache.java index f83a1233..82ada960 100644 --- a/src/main/java/com/alibaba/excel/cache/MapCache.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/cache/MapCache.java @@ -11,7 +11,7 @@ import com.alibaba.excel.context.AnalysisContext; * @author Jiaju Zhuang */ public class MapCache implements ReadCache { - private List cache = new ArrayList<>(); + private final List cache = new ArrayList<>(); @Override public void init(AnalysisContext analysisContext) {} diff --git a/src/main/java/com/alibaba/excel/cache/ReadCache.java b/easyexcel-core/src/main/java/com/alibaba/excel/cache/ReadCache.java similarity index 100% rename from src/main/java/com/alibaba/excel/cache/ReadCache.java rename to easyexcel-core/src/main/java/com/alibaba/excel/cache/ReadCache.java diff --git a/src/main/java/com/alibaba/excel/cache/XlsCache.java b/easyexcel-core/src/main/java/com/alibaba/excel/cache/XlsCache.java similarity index 94% rename from src/main/java/com/alibaba/excel/cache/XlsCache.java rename to easyexcel-core/src/main/java/com/alibaba/excel/cache/XlsCache.java index 9e814e0f..261bc187 100644 --- a/src/main/java/com/alibaba/excel/cache/XlsCache.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/cache/XlsCache.java @@ -11,7 +11,7 @@ import com.alibaba.excel.context.AnalysisContext; * @author Jiaju Zhuang */ public class XlsCache implements ReadCache { - private SSTRecord sstRecord; + private final SSTRecord sstRecord; public XlsCache(SSTRecord sstRecord) { this.sstRecord = sstRecord; diff --git a/src/main/java/com/alibaba/excel/cache/selector/EternalReadCacheSelector.java b/easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/EternalReadCacheSelector.java similarity index 100% rename from src/main/java/com/alibaba/excel/cache/selector/EternalReadCacheSelector.java rename to easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/EternalReadCacheSelector.java diff --git a/src/main/java/com/alibaba/excel/cache/selector/ReadCacheSelector.java b/easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/ReadCacheSelector.java similarity index 100% rename from src/main/java/com/alibaba/excel/cache/selector/ReadCacheSelector.java rename to easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/ReadCacheSelector.java diff --git a/src/main/java/com/alibaba/excel/cache/selector/SimpleReadCacheSelector.java b/easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/SimpleReadCacheSelector.java similarity index 96% rename from src/main/java/com/alibaba/excel/cache/selector/SimpleReadCacheSelector.java rename to easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/SimpleReadCacheSelector.java index d7cedd07..658806bd 100644 --- a/src/main/java/com/alibaba/excel/cache/selector/SimpleReadCacheSelector.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/cache/selector/SimpleReadCacheSelector.java @@ -33,12 +33,12 @@ public class SimpleReadCacheSelector implements ReadCacheSelector { /** * Shared strings exceeding this value will use {@link Ehcache},or use {@link MapCache}.unit MB. */ - private long maxUseMapCacheSize; + private final long maxUseMapCacheSize; /** * Maximum size of cache activation.unit MB. */ - private int maxCacheActivateSize; + private final int maxCacheActivateSize; public SimpleReadCacheSelector() { this(DEFAULT_MAX_USE_MAP_CACHE_SIZE, DEFAULT_MAX_EHCACHE_ACTIVATE_SIZE); diff --git a/src/main/java/com/alibaba/excel/constant/BuiltinFormats.java b/easyexcel-core/src/main/java/com/alibaba/excel/constant/BuiltinFormats.java similarity index 100% rename from src/main/java/com/alibaba/excel/constant/BuiltinFormats.java rename to easyexcel-core/src/main/java/com/alibaba/excel/constant/BuiltinFormats.java diff --git a/src/main/java/com/alibaba/excel/constant/ExcelXmlConstants.java b/easyexcel-core/src/main/java/com/alibaba/excel/constant/ExcelXmlConstants.java similarity index 100% rename from src/main/java/com/alibaba/excel/constant/ExcelXmlConstants.java rename to easyexcel-core/src/main/java/com/alibaba/excel/constant/ExcelXmlConstants.java diff --git a/src/main/java/com/alibaba/excel/constant/OrderConstant.java b/easyexcel-core/src/main/java/com/alibaba/excel/constant/OrderConstant.java similarity index 100% rename from src/main/java/com/alibaba/excel/constant/OrderConstant.java rename to easyexcel-core/src/main/java/com/alibaba/excel/constant/OrderConstant.java diff --git a/src/main/java/com/alibaba/excel/context/AnalysisContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/context/AnalysisContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/context/AnalysisContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/context/AnalysisContext.java diff --git a/src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java b/easyexcel-core/src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java similarity index 98% rename from src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java rename to easyexcel-core/src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java index 4edaef37..5385831b 100644 --- a/src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/context/AnalysisContextImpl.java @@ -46,7 +46,7 @@ public class AnalysisContextImpl implements AnalysisContext { /** * Event processor */ - private AnalysisEventProcessor analysisEventProcessor; + private final AnalysisEventProcessor analysisEventProcessor; public AnalysisContextImpl(ReadWorkbook readWorkbook, ExcelTypeEnum actualExcelType) { if (readWorkbook == null) { diff --git a/src/main/java/com/alibaba/excel/context/WriteContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/context/WriteContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContext.java diff --git a/src/main/java/com/alibaba/excel/context/WriteContextImpl.java b/easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContextImpl.java similarity index 100% rename from src/main/java/com/alibaba/excel/context/WriteContextImpl.java rename to easyexcel-core/src/main/java/com/alibaba/excel/context/WriteContextImpl.java diff --git a/src/main/java/com/alibaba/excel/context/csv/CsvReadContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/context/csv/CsvReadContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/context/csv/CsvReadContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/context/csv/CsvReadContext.java diff --git a/src/main/java/com/alibaba/excel/context/csv/DefaultCsvReadContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/context/csv/DefaultCsvReadContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/context/csv/DefaultCsvReadContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/context/csv/DefaultCsvReadContext.java diff --git a/src/main/java/com/alibaba/excel/context/xls/DefaultXlsReadContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/context/xls/DefaultXlsReadContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/context/xls/DefaultXlsReadContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/context/xls/DefaultXlsReadContext.java diff --git a/src/main/java/com/alibaba/excel/context/xls/XlsReadContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/context/xls/XlsReadContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/context/xls/XlsReadContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/context/xls/XlsReadContext.java diff --git a/src/main/java/com/alibaba/excel/context/xlsx/DefaultXlsxReadContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/context/xlsx/DefaultXlsxReadContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/context/xlsx/DefaultXlsxReadContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/context/xlsx/DefaultXlsxReadContext.java diff --git a/src/main/java/com/alibaba/excel/context/xlsx/XlsxReadContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/context/xlsx/XlsxReadContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/context/xlsx/XlsxReadContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/context/xlsx/XlsxReadContext.java diff --git a/src/main/java/com/alibaba/excel/converters/AutoConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/AutoConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/AutoConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/AutoConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/Converter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/Converter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/Converter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/Converter.java diff --git a/src/main/java/com/alibaba/excel/converters/ConverterKeyBuild.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/ConverterKeyBuild.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/ConverterKeyBuild.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/ConverterKeyBuild.java diff --git a/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java diff --git a/src/main/java/com/alibaba/excel/converters/NullableObjectConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/NullableObjectConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/NullableObjectConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/NullableObjectConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/ReadConverterContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/ReadConverterContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/ReadConverterContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/ReadConverterContext.java diff --git a/src/main/java/com/alibaba/excel/converters/WriteConverterContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/WriteConverterContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/WriteConverterContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/WriteConverterContext.java diff --git a/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalBooleanConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalBooleanConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalBooleanConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalBooleanConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalStringConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/bigdecimal/BigDecimalStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerBooleanConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerBooleanConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerBooleanConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerBooleanConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerStringConverter.java similarity index 94% rename from src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerStringConverter.java index 4894ac16..aa553108 100644 --- a/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerStringConverter.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerStringConverter.java @@ -37,6 +37,6 @@ public class BigIntegerStringConverter implements Converter { @Override public WriteCellData convertToExcelData(BigInteger value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { - return NumberUtils.formatToCellData(value, contentProperty); + return NumberUtils.formatToCellDataString(value, contentProperty); } } diff --git a/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanBooleanConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanBooleanConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanBooleanConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanBooleanConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanStringConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/booleanconverter/BooleanStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/bytearray/BoxingByteArrayImageConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/bytearray/BoxingByteArrayImageConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/bytearray/BoxingByteArrayImageConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/bytearray/BoxingByteArrayImageConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/bytearray/ByteArrayImageConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/bytearray/ByteArrayImageConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/bytearray/ByteArrayImageConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/bytearray/ByteArrayImageConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/byteconverter/ByteBooleanConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteBooleanConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/byteconverter/ByteBooleanConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteBooleanConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/byteconverter/ByteStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteStringConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/byteconverter/ByteStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/byteconverter/ByteStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/date/DateDateConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateDateConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/date/DateDateConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateDateConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/date/DateStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateStringConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/date/DateStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/date/DateStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleBooleanConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleBooleanConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleBooleanConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleBooleanConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleStringConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/doubleconverter/DoubleStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/file/FileImageConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/file/FileImageConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/file/FileImageConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/file/FileImageConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/floatconverter/FloatBooleanConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatBooleanConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/floatconverter/FloatBooleanConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatBooleanConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/floatconverter/FloatStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatStringConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/floatconverter/FloatStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/floatconverter/FloatStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/inputstream/InputStreamImageConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/inputstream/InputStreamImageConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/inputstream/InputStreamImageConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/inputstream/InputStreamImageConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/integer/IntegerBooleanConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerBooleanConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/integer/IntegerBooleanConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerBooleanConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/integer/IntegerStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerStringConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/integer/IntegerStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/integer/IntegerStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeDateConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeDateConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeDateConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeDateConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeStringConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/longconverter/LongBooleanConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongBooleanConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/longconverter/LongBooleanConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongBooleanConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/longconverter/LongStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongStringConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/longconverter/LongStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/longconverter/LongStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/shortconverter/ShortBooleanConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortBooleanConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/shortconverter/ShortBooleanConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortBooleanConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/shortconverter/ShortStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortStringConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/shortconverter/ShortStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/shortconverter/ShortStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/string/StringBooleanConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringBooleanConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/string/StringBooleanConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringBooleanConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/string/StringErrorConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringErrorConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/string/StringErrorConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringErrorConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/string/StringImageConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringImageConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/string/StringImageConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringImageConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/string/StringStringConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringStringConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/string/StringStringConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/string/StringStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/url/UrlImageConverter.java b/easyexcel-core/src/main/java/com/alibaba/excel/converters/url/UrlImageConverter.java similarity index 100% rename from src/main/java/com/alibaba/excel/converters/url/UrlImageConverter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/converters/url/UrlImageConverter.java diff --git a/src/main/java/com/alibaba/excel/enums/BooleanEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/BooleanEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/BooleanEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/BooleanEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/CellDataTypeEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/CellDataTypeEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/CellDataTypeEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/CellDataTypeEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/CellExtraTypeEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/CellExtraTypeEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/CellExtraTypeEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/CellExtraTypeEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/HeadKindEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/HeadKindEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/HeadKindEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/HeadKindEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/HolderEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/HolderEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/HolderEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/HolderEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/NumericCellTypeEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/NumericCellTypeEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/NumericCellTypeEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/NumericCellTypeEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/RowTypeEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/RowTypeEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/RowTypeEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/RowTypeEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/WriteDirectionEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteDirectionEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/WriteDirectionEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteDirectionEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/WriteLastRowTypeEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteLastRowTypeEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/WriteLastRowTypeEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteLastRowTypeEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/WriteTemplateAnalysisCellTypeEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteTemplateAnalysisCellTypeEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/WriteTemplateAnalysisCellTypeEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteTemplateAnalysisCellTypeEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/WriteTypeEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteTypeEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/WriteTypeEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/WriteTypeEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/poi/BorderStyleEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/BorderStyleEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/poi/BorderStyleEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/BorderStyleEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/poi/FillPatternTypeEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/FillPatternTypeEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/poi/FillPatternTypeEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/FillPatternTypeEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/poi/HorizontalAlignmentEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/HorizontalAlignmentEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/poi/HorizontalAlignmentEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/HorizontalAlignmentEnum.java diff --git a/src/main/java/com/alibaba/excel/enums/poi/VerticalAlignmentEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/VerticalAlignmentEnum.java similarity index 100% rename from src/main/java/com/alibaba/excel/enums/poi/VerticalAlignmentEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/enums/poi/VerticalAlignmentEnum.java diff --git a/src/main/java/com/alibaba/excel/event/AbstractIgnoreExceptionReadListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/event/AbstractIgnoreExceptionReadListener.java similarity index 100% rename from src/main/java/com/alibaba/excel/event/AbstractIgnoreExceptionReadListener.java rename to easyexcel-core/src/main/java/com/alibaba/excel/event/AbstractIgnoreExceptionReadListener.java diff --git a/src/main/java/com/alibaba/excel/event/AnalysisEventListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/event/AnalysisEventListener.java similarity index 100% rename from src/main/java/com/alibaba/excel/event/AnalysisEventListener.java rename to easyexcel-core/src/main/java/com/alibaba/excel/event/AnalysisEventListener.java diff --git a/src/main/java/com/alibaba/excel/event/Handler.java b/easyexcel-core/src/main/java/com/alibaba/excel/event/Handler.java similarity index 100% rename from src/main/java/com/alibaba/excel/event/Handler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/event/Handler.java diff --git a/src/main/java/com/alibaba/excel/event/Listener.java b/easyexcel-core/src/main/java/com/alibaba/excel/event/Listener.java similarity index 100% rename from src/main/java/com/alibaba/excel/event/Listener.java rename to easyexcel-core/src/main/java/com/alibaba/excel/event/Listener.java diff --git a/src/main/java/com/alibaba/excel/event/NotRepeatExecutor.java b/easyexcel-core/src/main/java/com/alibaba/excel/event/NotRepeatExecutor.java similarity index 100% rename from src/main/java/com/alibaba/excel/event/NotRepeatExecutor.java rename to easyexcel-core/src/main/java/com/alibaba/excel/event/NotRepeatExecutor.java diff --git a/src/main/java/com/alibaba/excel/event/Order.java b/easyexcel-core/src/main/java/com/alibaba/excel/event/Order.java similarity index 100% rename from src/main/java/com/alibaba/excel/event/Order.java rename to easyexcel-core/src/main/java/com/alibaba/excel/event/Order.java diff --git a/src/main/java/com/alibaba/excel/event/SyncReadListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/event/SyncReadListener.java similarity index 100% rename from src/main/java/com/alibaba/excel/event/SyncReadListener.java rename to easyexcel-core/src/main/java/com/alibaba/excel/event/SyncReadListener.java diff --git a/src/main/java/com/alibaba/excel/exception/ExcelAnalysisException.java b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelAnalysisException.java similarity index 84% rename from src/main/java/com/alibaba/excel/exception/ExcelAnalysisException.java rename to easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelAnalysisException.java index 490c541e..28a60901 100644 --- a/src/main/java/com/alibaba/excel/exception/ExcelAnalysisException.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelAnalysisException.java @@ -4,7 +4,7 @@ package com.alibaba.excel.exception; * * @author jipengfei */ -public class ExcelAnalysisException extends RuntimeException { +public class ExcelAnalysisException extends ExcelRuntimeException { public ExcelAnalysisException() {} diff --git a/src/main/java/com/alibaba/excel/exception/ExcelAnalysisStopException.java b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelAnalysisStopException.java similarity index 100% rename from src/main/java/com/alibaba/excel/exception/ExcelAnalysisStopException.java rename to easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelAnalysisStopException.java diff --git a/src/main/java/com/alibaba/excel/exception/ExcelCommonException.java b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelCommonException.java similarity index 85% rename from src/main/java/com/alibaba/excel/exception/ExcelCommonException.java rename to easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelCommonException.java index d8612147..4370159b 100644 --- a/src/main/java/com/alibaba/excel/exception/ExcelCommonException.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelCommonException.java @@ -4,7 +4,7 @@ package com.alibaba.excel.exception; * * @author Jiaju Zhuang */ -public class ExcelCommonException extends RuntimeException { +public class ExcelCommonException extends ExcelRuntimeException { public ExcelCommonException() {} diff --git a/src/main/java/com/alibaba/excel/exception/ExcelDataConvertException.java b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelDataConvertException.java similarity index 95% rename from src/main/java/com/alibaba/excel/exception/ExcelDataConvertException.java rename to easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelDataConvertException.java index ff1b409d..f351287a 100644 --- a/src/main/java/com/alibaba/excel/exception/ExcelDataConvertException.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelDataConvertException.java @@ -16,7 +16,7 @@ import lombok.Setter; @Getter @Setter @EqualsAndHashCode -public class ExcelDataConvertException extends RuntimeException { +public class ExcelDataConvertException extends ExcelRuntimeException { /** * NotNull. */ diff --git a/src/main/java/com/alibaba/excel/exception/ExcelGenerateException.java b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelGenerateException.java similarity index 83% rename from src/main/java/com/alibaba/excel/exception/ExcelGenerateException.java rename to easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelGenerateException.java index f508b17f..95ac9083 100644 --- a/src/main/java/com/alibaba/excel/exception/ExcelGenerateException.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelGenerateException.java @@ -3,7 +3,7 @@ package com.alibaba.excel.exception; /** * @author jipengfei */ -public class ExcelGenerateException extends RuntimeException { +public class ExcelGenerateException extends ExcelRuntimeException { public ExcelGenerateException(String message) { super(message); diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelRuntimeException.java b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelRuntimeException.java new file mode 100644 index 00000000..5d053201 --- /dev/null +++ b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelRuntimeException.java @@ -0,0 +1,21 @@ +package com.alibaba.excel.exception; + +/** + * Excel Exception + * @author Jiaju Zhuang + */ +public class ExcelRuntimeException extends RuntimeException { + public ExcelRuntimeException() {} + + public ExcelRuntimeException(String message) { + super(message); + } + + public ExcelRuntimeException(String message, Throwable cause) { + super(message, cause); + } + + public ExcelRuntimeException(Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/com/alibaba/excel/exception/ExcelWriteDataConvertException.java b/easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelWriteDataConvertException.java similarity index 100% rename from src/main/java/com/alibaba/excel/exception/ExcelWriteDataConvertException.java rename to easyexcel-core/src/main/java/com/alibaba/excel/exception/ExcelWriteDataConvertException.java diff --git a/src/main/java/com/alibaba/excel/metadata/AbstractCell.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractCell.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/AbstractCell.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractCell.java diff --git a/src/main/java/com/alibaba/excel/metadata/AbstractHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/AbstractHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractHolder.java diff --git a/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/AbstractParameterBuilder.java diff --git a/src/main/java/com/alibaba/excel/metadata/BasicParameter.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/BasicParameter.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/BasicParameter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/BasicParameter.java diff --git a/src/main/java/com/alibaba/excel/metadata/Cell.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/Cell.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/Cell.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/Cell.java diff --git a/src/main/java/com/alibaba/excel/metadata/CellExtra.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/CellExtra.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/CellExtra.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/CellExtra.java diff --git a/src/main/java/com/alibaba/excel/metadata/CellRange.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/CellRange.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/CellRange.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/CellRange.java diff --git a/src/main/java/com/alibaba/excel/metadata/ConfigurationHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/ConfigurationHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/ConfigurationHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/ConfigurationHolder.java diff --git a/src/main/java/com/alibaba/excel/metadata/Font.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/Font.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/Font.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/Font.java diff --git a/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/GlobalConfiguration.java diff --git a/src/main/java/com/alibaba/excel/metadata/Head.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/Head.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/Head.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/Head.java diff --git a/src/main/java/com/alibaba/excel/metadata/Holder.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/Holder.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/Holder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/Holder.java diff --git a/src/main/java/com/alibaba/excel/metadata/NullObject.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/NullObject.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/NullObject.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/NullObject.java diff --git a/src/main/java/com/alibaba/excel/metadata/csv/CsvCell.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCell.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/csv/CsvCell.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCell.java diff --git a/src/main/java/com/alibaba/excel/metadata/csv/CsvCellStyle.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCellStyle.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/csv/CsvCellStyle.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCellStyle.java diff --git a/src/main/java/com/alibaba/excel/metadata/csv/CsvDataFormat.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvDataFormat.java similarity index 91% rename from src/main/java/com/alibaba/excel/metadata/csv/CsvDataFormat.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvDataFormat.java index 42d3f043..9efc7321 100644 --- a/src/main/java/com/alibaba/excel/metadata/csv/CsvDataFormat.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvDataFormat.java @@ -45,10 +45,11 @@ public class CsvDataFormat implements DataFormat { if (index != null) { return index; } - index = (short)(formatList.size() + BuiltinFormats.MIN_CUSTOM_DATA_FORMAT_INDEX); + short indexPrimitive = (short)(formatList.size() + BuiltinFormats.MIN_CUSTOM_DATA_FORMAT_INDEX); + index = indexPrimitive; formatList.add(format); formatMap.put(format, index); - return index; + return indexPrimitive; } @Override diff --git a/src/main/java/com/alibaba/excel/metadata/csv/CsvRichTextString.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvRichTextString.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/csv/CsvRichTextString.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvRichTextString.java diff --git a/src/main/java/com/alibaba/excel/metadata/csv/CsvRow.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvRow.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/csv/CsvRow.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvRow.java diff --git a/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java diff --git a/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java diff --git a/src/main/java/com/alibaba/excel/metadata/data/CellData.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/CellData.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/data/CellData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/CellData.java diff --git a/src/main/java/com/alibaba/excel/metadata/data/ClientAnchorData.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/ClientAnchorData.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/data/ClientAnchorData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/ClientAnchorData.java diff --git a/src/main/java/com/alibaba/excel/metadata/data/CommentData.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/CommentData.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/data/CommentData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/CommentData.java diff --git a/src/main/java/com/alibaba/excel/metadata/data/CoordinateData.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/CoordinateData.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/data/CoordinateData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/CoordinateData.java diff --git a/src/main/java/com/alibaba/excel/metadata/data/DataFormatData.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/DataFormatData.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/data/DataFormatData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/DataFormatData.java diff --git a/src/main/java/com/alibaba/excel/metadata/data/FormulaData.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/FormulaData.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/data/FormulaData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/FormulaData.java diff --git a/src/main/java/com/alibaba/excel/metadata/data/HyperlinkData.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/HyperlinkData.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/data/HyperlinkData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/HyperlinkData.java diff --git a/src/main/java/com/alibaba/excel/metadata/data/ImageData.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/ImageData.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/data/ImageData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/ImageData.java diff --git a/src/main/java/com/alibaba/excel/metadata/data/ReadCellData.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/ReadCellData.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/data/ReadCellData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/ReadCellData.java diff --git a/src/main/java/com/alibaba/excel/metadata/data/RichTextStringData.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/RichTextStringData.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/data/RichTextStringData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/RichTextStringData.java diff --git a/src/main/java/com/alibaba/excel/metadata/data/WriteCellData.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/WriteCellData.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/data/WriteCellData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/data/WriteCellData.java diff --git a/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java diff --git a/src/main/java/com/alibaba/excel/metadata/format/ExcelGeneralNumberFormat.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/ExcelGeneralNumberFormat.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/format/ExcelGeneralNumberFormat.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/ExcelGeneralNumberFormat.java diff --git a/src/main/java/com/alibaba/excel/metadata/property/ColumnWidthProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ColumnWidthProperty.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/property/ColumnWidthProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ColumnWidthProperty.java diff --git a/src/main/java/com/alibaba/excel/metadata/property/DateTimeFormatProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/DateTimeFormatProperty.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/property/DateTimeFormatProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/DateTimeFormatProperty.java diff --git a/src/main/java/com/alibaba/excel/metadata/property/ExcelContentProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelContentProperty.java similarity index 97% rename from src/main/java/com/alibaba/excel/metadata/property/ExcelContentProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelContentProperty.java index f0b72198..0b3ad1a5 100644 --- a/src/main/java/com/alibaba/excel/metadata/property/ExcelContentProperty.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelContentProperty.java @@ -18,7 +18,7 @@ public class ExcelContentProperty { public static final ExcelContentProperty EMPTY = new ExcelContentProperty(); /** - * Java filed + * Java field */ private Field field; /** diff --git a/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java similarity index 93% rename from src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java index f3a8474a..61240d31 100644 --- a/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/ExcelHeadProperty.java @@ -109,8 +109,8 @@ public class ExcelHeadProperty { return; } // Declared fields - Map sortedAllFiledMap = MapUtils.newTreeMap(); - Map indexFiledMap = MapUtils.newTreeMap(); + Map sortedAllFieldMap = MapUtils.newTreeMap(); + Map indexFieldMap = MapUtils.newTreeMap(); boolean needIgnore = (holder instanceof AbstractWriteHolder) && ( !CollectionUtils.isEmpty(((AbstractWriteHolder)holder).getExcludeColumnFieldNames()) || !CollectionUtils @@ -118,10 +118,10 @@ public class ExcelHeadProperty { .isEmpty(((AbstractWriteHolder)holder).getIncludeColumnFieldNames()) || !CollectionUtils .isEmpty(((AbstractWriteHolder)holder).getIncludeColumnIndexes())); - ClassUtils.declaredFields(headClazz, sortedAllFiledMap, indexFiledMap, ignoreMap, needIgnore, holder); + ClassUtils.declaredFields(headClazz, sortedAllFieldMap, indexFieldMap, ignoreMap, needIgnore, holder); - for (Map.Entry entry : sortedAllFiledMap.entrySet()) { - initOneColumnProperty(entry.getKey(), entry.getValue(), indexFiledMap.containsKey(entry.getKey())); + for (Map.Entry entry : sortedAllFieldMap.entrySet()) { + initOneColumnProperty(entry.getKey(), entry.getValue(), indexFieldMap.containsKey(entry.getKey())); } headKind = HeadKindEnum.CLASS; } diff --git a/src/main/java/com/alibaba/excel/metadata/property/FontProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/FontProperty.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/property/FontProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/FontProperty.java diff --git a/src/main/java/com/alibaba/excel/metadata/property/LoopMergeProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/LoopMergeProperty.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/property/LoopMergeProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/LoopMergeProperty.java diff --git a/src/main/java/com/alibaba/excel/metadata/property/NumberFormatProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/NumberFormatProperty.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/property/NumberFormatProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/NumberFormatProperty.java diff --git a/src/main/java/com/alibaba/excel/metadata/property/OnceAbsoluteMergeProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/OnceAbsoluteMergeProperty.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/property/OnceAbsoluteMergeProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/OnceAbsoluteMergeProperty.java diff --git a/src/main/java/com/alibaba/excel/metadata/property/RowHeightProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/RowHeightProperty.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/property/RowHeightProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/RowHeightProperty.java diff --git a/src/main/java/com/alibaba/excel/metadata/property/StyleProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/StyleProperty.java similarity index 100% rename from src/main/java/com/alibaba/excel/metadata/property/StyleProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/metadata/property/StyleProperty.java diff --git a/src/main/java/com/alibaba/excel/read/builder/AbstractExcelReaderParameterBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/builder/AbstractExcelReaderParameterBuilder.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/builder/AbstractExcelReaderParameterBuilder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/builder/AbstractExcelReaderParameterBuilder.java diff --git a/src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java similarity index 92% rename from src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java index b630eea2..d2a24b44 100644 --- a/src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/builder/ExcelReaderBuilder.java @@ -2,6 +2,7 @@ package com.alibaba.excel.read.builder; import java.io.File; import java.io.InputStream; +import java.nio.charset.Charset; import java.util.HashSet; import java.util.List; @@ -27,7 +28,7 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder @@ -151,10 +161,10 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder * Please pass in the name of a class ,like : "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl" * - * @see SAXParserFactory#newInstance() - * @see SAXParserFactory#newInstance(String, ClassLoader) * @param xlsxSAXParserFactoryName * @return + * @see SAXParserFactory#newInstance() + * @see SAXParserFactory#newInstance(String, ClassLoader) */ public ExcelReaderBuilder xlsxSAXParserFactoryName(String xlsxSAXParserFactoryName) { readWorkbook.setXlsxSAXParserFactoryName(xlsxSAXParserFactoryName); @@ -164,8 +174,7 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder List doReadAllSync() { SyncReadListener syncReadListener = new SyncReadListener(); registerReadListener(syncReadListener); - ExcelReader excelReader = build(); - excelReader.readAll(); - excelReader.finish(); + try (ExcelReader excelReader = build()) { + excelReader.readAll(); + excelReader.finish(); + } return (List)syncReadListener.getList(); } diff --git a/src/main/java/com/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java similarity index 98% rename from src/main/java/com/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java index 84ec6bae..4778169b 100644 --- a/src/main/java/com/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/builder/ExcelReaderSheetBuilder.java @@ -18,7 +18,7 @@ public class ExcelReaderSheetBuilder extends AbstractExcelReaderParameterBuilder /** * Sheet */ - private ReadSheet readSheet; + private final ReadSheet readSheet; public ExcelReaderSheetBuilder() { this.readSheet = new ReadSheet(); diff --git a/src/main/java/com/alibaba/excel/read/listener/IgnoreExceptionReadListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/IgnoreExceptionReadListener.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/listener/IgnoreExceptionReadListener.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/listener/IgnoreExceptionReadListener.java diff --git a/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java similarity index 99% rename from src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java index 057919e9..44f77513 100644 --- a/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java @@ -15,8 +15,8 @@ import com.alibaba.excel.util.ClassUtils; import com.alibaba.excel.util.ConverterUtils; import com.alibaba.excel.util.MapUtils; -import net.sf.cglib.beans.BeanMap; import org.apache.commons.collections4.CollectionUtils; +import org.springframework.cglib.beans.BeanMap; /** * Convert to the object the user needs diff --git a/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/listener/PageReadListener.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java diff --git a/src/main/java/com/alibaba/excel/read/listener/ReadListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ReadListener.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/listener/ReadListener.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ReadListener.java diff --git a/src/main/java/com/alibaba/excel/read/metadata/ReadBasicParameter.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/ReadBasicParameter.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/ReadBasicParameter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/ReadBasicParameter.java diff --git a/src/main/java/com/alibaba/excel/read/metadata/ReadSheet.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/ReadSheet.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/ReadSheet.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/ReadSheet.java diff --git a/src/main/java/com/alibaba/excel/read/metadata/ReadWorkbook.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/ReadWorkbook.java similarity index 95% rename from src/main/java/com/alibaba/excel/read/metadata/ReadWorkbook.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/ReadWorkbook.java index 54ab034c..4f3a3aab 100644 --- a/src/main/java/com/alibaba/excel/read/metadata/ReadWorkbook.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/ReadWorkbook.java @@ -2,6 +2,7 @@ package com.alibaba.excel.read.metadata; import java.io.File; import java.io.InputStream; +import java.nio.charset.Charset; import java.util.Set; import javax.xml.parsers.SAXParserFactory; @@ -43,6 +44,11 @@ public class ReadWorkbook extends ReadBasicParameter { * If 'inputStream' and 'file' all not empty, file first */ private File file; + /** + * charset. + * Only work on the CSV file + */ + private Charset charset; /** * Mandatory use 'inputStream' .Default is false. *

diff --git a/src/main/java/com/alibaba/excel/read/metadata/holder/AbstractReadHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/AbstractReadHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/holder/AbstractReadHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/AbstractReadHolder.java diff --git a/src/main/java/com/alibaba/excel/read/metadata/holder/ReadHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/holder/ReadHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadHolder.java diff --git a/src/main/java/com/alibaba/excel/read/metadata/holder/ReadRowHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadRowHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/holder/ReadRowHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadRowHolder.java diff --git a/src/main/java/com/alibaba/excel/read/metadata/holder/ReadSheetHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadSheetHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/holder/ReadSheetHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadSheetHolder.java diff --git a/src/main/java/com/alibaba/excel/read/metadata/holder/ReadWorkbookHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadWorkbookHolder.java similarity index 94% rename from src/main/java/com/alibaba/excel/read/metadata/holder/ReadWorkbookHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadWorkbookHolder.java index 7de30aa5..a84cc315 100644 --- a/src/main/java/com/alibaba/excel/read/metadata/holder/ReadWorkbookHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadWorkbookHolder.java @@ -2,6 +2,7 @@ package com.alibaba.excel.read.metadata.holder; import java.io.File; import java.io.InputStream; +import java.nio.charset.Charset; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -51,6 +52,12 @@ public class ReadWorkbookHolder extends AbstractReadHolder { * If 'inputStream' and 'file' all not empty, file first */ private File file; + + /** + * charset. + * Only work on the CSV file + */ + private Charset charset; /** * Mandatory use 'inputStream' .Default is false. *

@@ -68,7 +75,6 @@ public class ReadWorkbookHolder extends AbstractReadHolder { /** * This object can be read in the Listener {@link AnalysisEventListener#invoke(Object, AnalysisContext)} * {@link AnalysisContext#getCustom()} - * */ private Object customObject; /** @@ -122,6 +128,13 @@ public class ReadWorkbookHolder extends AbstractReadHolder { this.inputStream = readWorkbook.getInputStream(); } this.file = readWorkbook.getFile(); + + if (readWorkbook.getCharset() == null) { + this.charset = Charset.defaultCharset(); + } else { + this.charset = readWorkbook.getCharset(); + } + if (readWorkbook.getMandatoryUseInputStream() == null) { this.mandatoryUseInputStream = Boolean.FALSE; } else { @@ -160,7 +173,6 @@ public class ReadWorkbookHolder extends AbstractReadHolder { this.password = readWorkbook.getPassword(); } - @Override public HolderEnum holderType() { return HolderEnum.WORKBOOK; diff --git a/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadSheetHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadSheetHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadSheetHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadSheetHolder.java diff --git a/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 similarity index 90% rename from src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/csv/CsvReadWorkbookHolder.java index 0a322d58..90ebe2b5 100644 --- a/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 @@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVParser; /** * Workbook holder @@ -20,6 +21,7 @@ import org.apache.commons.csv.CSVFormat; public class CsvReadWorkbookHolder extends ReadWorkbookHolder { private CSVFormat csvFormat; + private CSVParser csvParser; public CsvReadWorkbookHolder(ReadWorkbook readWorkbook) { super(readWorkbook); diff --git a/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadSheetHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadSheetHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadSheetHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadSheetHolder.java diff --git a/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadWorkbookHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadWorkbookHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadWorkbookHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadWorkbookHolder.java diff --git a/src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadSheetHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadSheetHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadSheetHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadSheetHolder.java diff --git a/src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadWorkbookHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadWorkbookHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadWorkbookHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xlsx/XlsxReadWorkbookHolder.java diff --git a/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 similarity index 100% rename from src/main/java/com/alibaba/excel/read/metadata/property/ExcelReadHeadProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/property/ExcelReadHeadProperty.java diff --git a/src/main/java/com/alibaba/excel/read/processor/AnalysisEventProcessor.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/processor/AnalysisEventProcessor.java similarity index 100% rename from src/main/java/com/alibaba/excel/read/processor/AnalysisEventProcessor.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/processor/AnalysisEventProcessor.java diff --git a/src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java similarity index 99% rename from src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java rename to easyexcel-core/src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java index 914a9654..45edb7b7 100644 --- a/src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java @@ -37,7 +37,7 @@ public class DefaultAnalysisEventProcessor implements AnalysisEventProcessor { public void endRow(AnalysisContext analysisContext) { if (RowTypeEnum.EMPTY.equals(analysisContext.readRowHolder().getRowType())) { if (LOGGER.isDebugEnabled()) { - LOGGER.warn("Empty row!"); + LOGGER.debug("Empty row!"); } if (analysisContext.readWorkbookHolder().getIgnoreEmptyRow()) { return; diff --git a/src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java b/easyexcel-core/src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java similarity index 76% rename from src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java rename to easyexcel-core/src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java index eb4c4cbd..09ab04ec 100644 --- a/src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/support/ExcelTypeEnum.java @@ -10,31 +10,38 @@ import com.alibaba.excel.exception.ExcelCommonException; import com.alibaba.excel.read.metadata.ReadWorkbook; import com.alibaba.excel.util.StringUtils; -import org.apache.poi.poifs.filesystem.FileMagic; +import lombok.Getter; +import org.apache.poi.util.IOUtils; /** * @author jipengfei */ +@Getter public enum ExcelTypeEnum { + /** * csv */ - CSV(".csv"), + CSV(".csv", new byte[] {-27, -89, -109, -27}), /** * xls */ - XLS(".xls"), + XLS(".xls", new byte[] {-48, -49, 17, -32, -95, -79, 26, -31}), /** * xlsx */ - XLSX(".xlsx"); + XLSX(".xlsx", new byte[] {80, 75, 3, 4}); - private String value; + final String value; + final byte[] magic; - ExcelTypeEnum(String value) { - this.setValue(value); + ExcelTypeEnum(String value, byte[] magic) { + this.value = value; + this.magic = magic; } + final static int MAX_PATTERN_LENGTH = 8; + public static ExcelTypeEnum valueOf(ReadWorkbook readWorkbook) { ExcelTypeEnum excelType = readWorkbook.getExcelType(); if (excelType != null) { @@ -85,22 +92,27 @@ public enum ExcelTypeEnum { } private static ExcelTypeEnum recognitionExcelType(InputStream inputStream) throws Exception { - FileMagic fileMagic = FileMagic.valueOf(inputStream); - if (FileMagic.OLE2.equals(fileMagic)) { - return XLS; - } - if (FileMagic.OOXML.equals(fileMagic)) { + // Grab the first bytes of this stream + 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"); } - public String getValue() { - return value; + private static boolean findMagic(byte[] expected, byte[] actual) { + int i = 0; + for (byte expectedByte : expected) { + if (actual[i++] != expectedByte && expectedByte != '?') { + return false; + } + } + return true; } - public void setValue(String value) { - this.value = value; - } } diff --git a/src/main/java/com/alibaba/excel/util/BeanMapUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/BeanMapUtils.java similarity index 82% rename from src/main/java/com/alibaba/excel/util/BeanMapUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/BeanMapUtils.java index eab4a70f..30b2c692 100644 --- a/src/main/java/com/alibaba/excel/util/BeanMapUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/BeanMapUtils.java @@ -1,8 +1,7 @@ package com.alibaba.excel.util; -import net.sf.cglib.beans.BeanMap; -import net.sf.cglib.beans.BeanMap.Generator; -import net.sf.cglib.core.DefaultNamingPolicy; +import org.springframework.cglib.beans.BeanMap; +import org.springframework.cglib.core.DefaultNamingPolicy; /** * bean utils @@ -23,8 +22,9 @@ public class BeanMapUtils { * @return a new BeanMap instance */ public static BeanMap create(Object bean) { - Generator gen = new Generator(); + BeanMap.Generator gen = new BeanMap.Generator(); gen.setBean(bean); + gen.setContextClass(bean.getClass()); gen.setNamingPolicy(EasyExcelNamingPolicy.INSTANCE); return gen.create(); } diff --git a/src/main/java/com/alibaba/excel/util/BooleanUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/BooleanUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/BooleanUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/BooleanUtils.java diff --git a/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java similarity index 84% rename from src/main/java/com/alibaba/excel/util/ClassUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java index f79dfdcc..6bed3052 100644 --- a/src/main/java/com/alibaba/excel/util/ClassUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java @@ -35,7 +35,7 @@ import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; -import net.sf.cglib.beans.BeanMap; +import org.springframework.cglib.beans.BeanMap; /** * Licensed to the Apache Software Foundation (ASF) under one or more @@ -162,7 +162,7 @@ public class ClassUtils { Class> convertClazz = excelProperty.converter(); if (convertClazz != AutoConverter.class) { try { - Converter converter = convertClazz.newInstance(); + Converter converter = convertClazz.getDeclaredConstructor().newInstance(); excelContentProperty.setConverter(converter); } catch (Exception e) { throw new ExcelCommonException( @@ -195,17 +195,17 @@ public class ClassUtils { } /** - * Parsing filed in the class + * Parsing field in the class * * @param clazz Need to parse the class - * @param sortedAllFiledMap Complete the map of sorts - * @param indexFiledMap Use the index to sort fields + * @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 */ - public static void declaredFields(Class clazz, Map sortedAllFiledMap, - Map indexFiledMap, Map ignoreMap, Boolean needIgnore, Holder holder) { + public static void declaredFields(Class clazz, Map sortedAllFieldMap, + Map indexFieldMap, Map ignoreMap, Boolean needIgnore, Holder holder) { FieldCache fieldCache = declaredFields(clazz); if (fieldCache == null) { return; @@ -213,20 +213,20 @@ public class ClassUtils { if (ignoreMap != null) { ignoreMap.putAll(fieldCache.getIgnoreMap()); } - Map tempIndexFieldMap = indexFiledMap; + Map tempIndexFieldMap = indexFieldMap; if (tempIndexFieldMap == null) { tempIndexFieldMap = MapUtils.newTreeMap(); } - tempIndexFieldMap.putAll(fieldCache.getIndexFiledMap()); + tempIndexFieldMap.putAll(fieldCache.getIndexFieldMap()); - Map originSortedAllFiledMap = fieldCache.getSortedAllFiledMap(); + Map originSortedAllFieldMap = fieldCache.getSortedAllFieldMap(); if (!needIgnore) { - sortedAllFiledMap.putAll(originSortedAllFiledMap); + sortedAllFieldMap.putAll(originSortedAllFieldMap); return; } int index = 0; - for (Map.Entry entry : originSortedAllFiledMap.entrySet()) { + for (Map.Entry entry : originSortedAllFieldMap.entrySet()) { Integer key = entry.getKey(); Field field = entry.getValue(); @@ -239,22 +239,22 @@ public class ClassUtils { } else { // Mandatory sorted fields if (tempIndexFieldMap.containsKey(key)) { - sortedAllFiledMap.put(key, field); + sortedAllFieldMap.put(key, field); } else { // Need to reorder automatically // Check whether the current key is already in use - while (sortedAllFiledMap.containsKey(index)) { + while (sortedAllFieldMap.containsKey(index)) { index++; } - sortedAllFiledMap.put(index++, field); + sortedAllFieldMap.put(index++, field); } } } } - public static void declaredFields(Class clazz, Map sortedAllFiledMap, Boolean needIgnore, + public static void declaredFields(Class clazz, Map sortedAllFieldMap, Boolean needIgnore, WriteHolder writeHolder) { - declaredFields(clazz, sortedAllFiledMap, null, null, needIgnore, writeHolder); + declaredFields(clazz, sortedAllFieldMap, null, null, needIgnore, writeHolder); } private static FieldCache declaredFields(Class clazz) { @@ -272,43 +272,43 @@ public class ClassUtils { tempClass = tempClass.getSuperclass(); } // Screening of field - Map> orderFiledMap = new TreeMap>(); - Map indexFiledMap = new TreeMap(); + 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, orderFiledMap, indexFiledMap, ignoreMap, excelIgnoreUnannotated); + declaredOneField(field, orderFieldMap, indexFieldMap, ignoreMap, excelIgnoreUnannotated); } - return new FieldCache(buildSortedAllFiledMap(orderFiledMap, indexFiledMap), indexFiledMap, ignoreMap); + return new FieldCache(buildSortedAllFieldMap(orderFieldMap, indexFieldMap), indexFieldMap, ignoreMap); }); } - private static Map buildSortedAllFiledMap(Map> orderFiledMap, - Map indexFiledMap) { + private static Map buildSortedAllFieldMap(Map> orderFieldMap, + Map indexFieldMap) { - Map sortedAllFiledMap = new HashMap( - (orderFiledMap.size() + indexFiledMap.size()) * 4 / 3 + 1); + Map sortedAllFieldMap = new HashMap( + (orderFieldMap.size() + indexFieldMap.size()) * 4 / 3 + 1); - Map tempIndexFiledMap = new HashMap(indexFiledMap); + Map tempIndexFieldMap = new HashMap(indexFieldMap); int index = 0; - for (List fieldList : orderFiledMap.values()) { + for (List fieldList : orderFieldMap.values()) { for (Field field : fieldList) { - while (tempIndexFiledMap.containsKey(index)) { - sortedAllFiledMap.put(index, tempIndexFiledMap.get(index)); - tempIndexFiledMap.remove(index); + while (tempIndexFieldMap.containsKey(index)) { + sortedAllFieldMap.put(index, tempIndexFieldMap.get(index)); + tempIndexFieldMap.remove(index); index++; } - sortedAllFiledMap.put(index, field); + sortedAllFieldMap.put(index, field); index++; } } - sortedAllFiledMap.putAll(tempIndexFiledMap); - return sortedAllFiledMap; + sortedAllFieldMap.putAll(tempIndexFieldMap); + return sortedAllFieldMap; } - private static void declaredOneField(Field field, Map> orderFiledMap, - Map indexFiledMap, Map ignoreMap, + private static void declaredOneField(Field field, Map> orderFieldMap, + Map indexFieldMap, Map ignoreMap, ExcelIgnoreUnannotated excelIgnoreUnannotated) { ExcelIgnore excelIgnore = field.getAnnotation(ExcelIgnore.class); @@ -330,11 +330,11 @@ public class ClassUtils { return; } if (excelProperty != null && excelProperty.index() >= 0) { - if (indexFiledMap.containsKey(excelProperty.index())) { - throw new ExcelCommonException("The index of '" + indexFiledMap.get(excelProperty.index()).getName() + if (indexFieldMap.containsKey(excelProperty.index())) { + throw new ExcelCommonException("The index of '" + indexFieldMap.get(excelProperty.index()).getName() + "' and '" + field.getName() + "' must be inconsistent"); } - indexFiledMap.put(excelProperty.index(), field); + indexFieldMap.put(excelProperty.index(), field); return; } @@ -342,29 +342,29 @@ public class ClassUtils { if (excelProperty != null) { order = excelProperty.order(); } - List orderFiledList = orderFiledMap.computeIfAbsent(order, key -> ListUtils.newArrayList()); - orderFiledList.add(field); + List orderFieldList = orderFieldMap.computeIfAbsent(order, key -> ListUtils.newArrayList()); + orderFieldList.add(field); } private static class FieldCache { - private final Map sortedAllFiledMap; - private final Map indexFiledMap; + private final Map sortedAllFieldMap; + private final Map indexFieldMap; private final Map ignoreMap; - public FieldCache(Map sortedAllFiledMap, Map indexFiledMap, + public FieldCache(Map sortedAllFieldMap, Map indexFieldMap, Map ignoreMap) { - this.sortedAllFiledMap = sortedAllFiledMap; - this.indexFiledMap = indexFiledMap; + this.sortedAllFieldMap = sortedAllFieldMap; + this.indexFieldMap = indexFieldMap; this.ignoreMap = ignoreMap; } - public Map getSortedAllFiledMap() { - return sortedAllFiledMap; + public Map getSortedAllFieldMap() { + return sortedAllFieldMap; } - public Map getIndexFiledMap() { - return indexFiledMap; + public Map getIndexFieldMap() { + return indexFieldMap; } public Map getIgnoreMap() { diff --git a/src/main/java/com/alibaba/excel/util/ConverterUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ConverterUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/ConverterUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/ConverterUtils.java diff --git a/src/main/java/com/alibaba/excel/util/DateUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/DateUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/DateUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/DateUtils.java diff --git a/src/main/java/com/alibaba/excel/util/FieldUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/FieldUtils.java similarity index 97% rename from src/main/java/com/alibaba/excel/util/FieldUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/FieldUtils.java index 0a825a7b..42cc3e4a 100644 --- a/src/main/java/com/alibaba/excel/util/FieldUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/FieldUtils.java @@ -6,7 +6,7 @@ import java.util.Map; import com.alibaba.excel.metadata.NullObject; -import net.sf.cglib.beans.BeanMap; +import org.springframework.cglib.beans.BeanMap; /** * Licensed to the Apache Software Foundation (ASF) under one or more @@ -30,9 +30,9 @@ public class FieldUtils { private static final int START_RESOLVE_FIELD_LENGTH = 2; - public static Class getFieldClass(Map dataMap, String filedName, Object value) { + public static Class getFieldClass(Map dataMap, String fieldName, Object value) { if (dataMap instanceof BeanMap) { - Class fieldClass = ((BeanMap)dataMap).getPropertyType(filedName); + Class fieldClass = ((BeanMap)dataMap).getPropertyType(fieldName); if (fieldClass != null) { return fieldClass; } diff --git a/src/main/java/com/alibaba/excel/util/FileTypeUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/FileTypeUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/FileTypeUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/FileTypeUtils.java diff --git a/src/main/java/com/alibaba/excel/util/FileUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/FileUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/FileUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/FileUtils.java diff --git a/src/main/java/com/alibaba/excel/util/IntUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/IntUtils.java similarity index 94% rename from src/main/java/com/alibaba/excel/util/IntUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/IntUtils.java index 6d2e244c..bca73f10 100644 --- a/src/main/java/com/alibaba/excel/util/IntUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/IntUtils.java @@ -1,8 +1,5 @@ package com.alibaba.excel.util; -import java.util.ArrayList; -import java.util.List; - /** * Int utils * diff --git a/src/main/java/com/alibaba/excel/util/IoUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/IoUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/IoUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/IoUtils.java diff --git a/src/main/java/com/alibaba/excel/util/ListUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ListUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/ListUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/ListUtils.java diff --git a/src/main/java/com/alibaba/excel/util/MapUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/MapUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/MapUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/MapUtils.java diff --git a/src/main/java/com/alibaba/excel/util/MemberUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/MemberUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/MemberUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/MemberUtils.java diff --git a/src/main/java/com/alibaba/excel/util/NumberDataFormatterUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/NumberDataFormatterUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/NumberDataFormatterUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/NumberDataFormatterUtils.java diff --git a/src/main/java/com/alibaba/excel/util/NumberUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/NumberUtils.java similarity index 90% rename from src/main/java/com/alibaba/excel/util/NumberUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/NumberUtils.java index c467762c..4646c396 100644 --- a/src/main/java/com/alibaba/excel/util/NumberUtils.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/NumberUtils.java @@ -75,7 +75,7 @@ public class NumberUtils { */ public static Short parseShort(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { - return Short.valueOf(string); + return new BigDecimal(string).shortValue(); } return parse(string, contentProperty).shortValue(); } @@ -89,21 +89,21 @@ public class NumberUtils { */ public static Long parseLong(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { - return Long.valueOf(string); + return new BigDecimal(string).longValue(); } return parse(string, contentProperty).longValue(); } /** - * parse + * parse Integer from string * - * @param string - * @param contentProperty - * @return + * @param string An integer read in string format + * @param contentProperty Properties of the content read in + * @return An integer converted from a string */ public static Integer parseInteger(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { - return Integer.valueOf(string); + return new BigDecimal(string).intValue(); } return parse(string, contentProperty).intValue(); } @@ -117,7 +117,7 @@ public class NumberUtils { */ public static Float parseFloat(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { - return Float.valueOf(string); + return new BigDecimal(string).floatValue(); } return parse(string, contentProperty).floatValue(); } @@ -146,7 +146,7 @@ public class NumberUtils { */ public static Byte parseByte(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { - return Byte.valueOf(string); + return new BigDecimal(string).byteValue(); } return parse(string, contentProperty).byteValue(); } @@ -160,7 +160,7 @@ public class NumberUtils { */ public static Double parseDouble(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { - return Double.valueOf(string); + return new BigDecimal(string).doubleValue(); } return parse(string, contentProperty).doubleValue(); } diff --git a/src/main/java/com/alibaba/excel/util/PositionUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/PositionUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/PositionUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/PositionUtils.java diff --git a/src/main/java/com/alibaba/excel/util/SheetUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/SheetUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/SheetUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/SheetUtils.java diff --git a/src/main/java/com/alibaba/excel/util/StringUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/StringUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/StringUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/StringUtils.java diff --git a/src/main/java/com/alibaba/excel/util/StyleUtil.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/StyleUtil.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/StyleUtil.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/StyleUtil.java diff --git a/src/main/java/com/alibaba/excel/util/Validate.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/Validate.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/Validate.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/Validate.java diff --git a/src/main/java/com/alibaba/excel/util/WorkBookUtil.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/WorkBookUtil.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/WorkBookUtil.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/WorkBookUtil.java diff --git a/src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java similarity index 100% rename from src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java rename to easyexcel-core/src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java diff --git a/src/main/java/com/alibaba/excel/write/ExcelBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/ExcelBuilder.java similarity index 98% rename from src/main/java/com/alibaba/excel/write/ExcelBuilder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/ExcelBuilder.java index a9f7e601..6a323388 100644 --- a/src/main/java/com/alibaba/excel/write/ExcelBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/ExcelBuilder.java @@ -1,7 +1,6 @@ package com.alibaba.excel.write; import java.util.Collection; -import java.util.List; import com.alibaba.excel.context.WriteContext; import com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy; diff --git a/src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java similarity index 98% rename from src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java index d6503c6c..67e2b9a2 100644 --- a/src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java @@ -22,7 +22,7 @@ import org.apache.poi.ss.util.CellRangeAddress; */ public class ExcelBuilderImpl implements ExcelBuilder { - private WriteContext context; + private final WriteContext context; private ExcelWriteFillExecutor excelWriteFillExecutor; private ExcelWriteAddExecutor excelWriteAddExecutor; diff --git a/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java similarity index 77% rename from src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java index 751ae5cd..f8844a52 100644 --- a/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder.java @@ -77,11 +77,21 @@ public abstract class AbstractExcelWriterParameterBuilder excludeColumnFieldNames) { + parameter().setExcludeColumnFieldNames(excludeColumnFieldNames); + return self(); + } + /** * Ignore the custom columns. */ - public T excludeColumnFiledNames(Collection excludeColumnFiledNames) { - parameter().setExcludeColumnFieldNames(excludeColumnFiledNames); + public T excludeColumnFieldNames(Collection excludeColumnFieldNames) { + parameter().setExcludeColumnFieldNames(excludeColumnFieldNames); return self(); } @@ -95,10 +105,19 @@ public abstract class AbstractExcelWriterParameterBuilder includeColumnFiledNames) { - parameter().setIncludeColumnFieldNames(includeColumnFiledNames); + public T includeColumnFiledNames(Collection includeColumnFieldNames) { + parameter().setIncludeColumnFieldNames(includeColumnFieldNames); return self(); } + /** + * Only output the custom columns. + */ + public T includeColumnFieldNames(Collection includeColumnFieldNames) { + parameter().setIncludeColumnFieldNames(includeColumnFieldNames); + return self(); + } } diff --git a/src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java similarity index 94% rename from src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java index dcd0a80d..75d702f8 100644 --- a/src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/builder/ExcelWriterBuilder.java @@ -3,6 +3,7 @@ package com.alibaba.excel.write.builder; import java.io.File; import java.io.InputStream; import java.io.OutputStream; +import java.nio.charset.Charset; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.support.ExcelTypeEnum; @@ -85,6 +86,15 @@ public class ExcelWriterBuilder extends AbstractExcelWriterParameterBuilder sortedAllFiledMap = new TreeMap<>(); + // BeanMap is out of order, so use sortedAllFieldMap + Map sortedAllFieldMap = new TreeMap<>(); int relativeRowIndex = 0; for (Object oneRowData : data) { int lastRowIndex = relativeRowIndex + newRowIndex; - addOneRowOfDataToExcel(oneRowData, lastRowIndex, relativeRowIndex, sortedAllFiledMap); + addOneRowOfDataToExcel(oneRowData, lastRowIndex, relativeRowIndex, sortedAllFieldMap); relativeRowIndex++; } } private void addOneRowOfDataToExcel(Object oneRowData, int rowIndex, int relativeRowIndex, - Map sortedAllFiledMap) { + Map sortedAllFieldMap) { if (oneRowData == null) { return; } @@ -79,7 +79,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, sortedAllFiledMap); + addJavaObjectToExcel(oneRowData, row, rowIndex, relativeRowIndex, sortedAllFieldMap); } WriteHandlerUtils.afterRowDispose(rowWriteHandlerContext); @@ -139,7 +139,7 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { } private void addJavaObjectToExcel(Object oneRowData, Row row, int rowIndex, int relativeRowIndex, - Map sortedAllFiledMap) { + Map sortedAllFieldMap) { 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 @@ -186,18 +186,18 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { maxCellIndex++; Map ignoreMap = writeContext.currentWriteHolder().excelWriteHeadProperty().getIgnoreMap(); - initSortedAllFiledMapFieldList(oneRowData.getClass(), sortedAllFiledMap); - for (Map.Entry entry : sortedAllFiledMap.entrySet()) { + initSortedAllFieldMapFieldList(oneRowData.getClass(), sortedAllFieldMap); + for (Map.Entry entry : sortedAllFieldMap.entrySet()) { Field field = entry.getValue(); - String filedName = FieldUtils.resolveCglibFieldName(field); - boolean uselessData = !beanKeySet.contains(filedName) || beanMapHandledSet.contains(filedName) - || ignoreMap.containsKey(filedName); + String fieldName = FieldUtils.resolveCglibFieldName(field); + boolean uselessData = !beanKeySet.contains(fieldName) || beanMapHandledSet.contains(fieldName) + || ignoreMap.containsKey(fieldName); if (uselessData) { continue; } - Object value = beanMap.get(filedName); + Object value = beanMap.get(fieldName); ExcelContentProperty excelContentProperty = ClassUtils.declaredExcelContentProperty(beanMap, - currentWriteHolder.excelWriteHeadProperty().getHeadClazz(), filedName); + currentWriteHolder.excelWriteHeadProperty().getHeadClazz(), fieldName); CellWriteHandlerContext cellWriteHandlerContext = WriteHandlerUtils.createCellWriteHandlerContext( writeContext, row, rowIndex, null, maxCellIndex, relativeRowIndex, Boolean.FALSE, excelContentProperty); WriteHandlerUtils.beforeCellCreate(cellWriteHandlerContext); @@ -210,7 +210,7 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { WriteHandlerUtils.afterCellCreate(cellWriteHandlerContext); cellWriteHandlerContext.setOriginalValue(value); - cellWriteHandlerContext.setOriginalFieldClass(FieldUtils.getFieldClass(beanMap, filedName, value)); + cellWriteHandlerContext.setOriginalFieldClass(FieldUtils.getFieldClass(beanMap, fieldName, value)); converterAndSet(cellWriteHandlerContext); WriteHandlerUtils.afterCellDispose(cellWriteHandlerContext); @@ -218,8 +218,8 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { } } - private void initSortedAllFiledMapFieldList(Class clazz, Map sortedAllFiledMap) { - if (!sortedAllFiledMap.isEmpty()) { + private void initSortedAllFieldMapFieldList(Class clazz, Map sortedAllFieldMap) { + if (!sortedAllFieldMap.isEmpty()) { return; } @@ -229,7 +229,7 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor { .isEmpty(writeSheetHolder.getExcludeColumnIndexes()) || !CollectionUtils .isEmpty(writeSheetHolder.getIncludeColumnFieldNames()) || !CollectionUtils .isEmpty(writeSheetHolder.getIncludeColumnIndexes()); - ClassUtils.declaredFields(clazz, sortedAllFiledMap, needIgnore, writeSheetHolder); + ClassUtils.declaredFields(clazz, sortedAllFieldMap, needIgnore, writeSheetHolder); } } diff --git a/src/main/java/com/alibaba/excel/write/executor/ExcelWriteExecutor.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteExecutor.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/executor/ExcelWriteExecutor.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteExecutor.java diff --git a/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java diff --git a/src/main/java/com/alibaba/excel/write/handler/AbstractCellWriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractCellWriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/AbstractCellWriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractCellWriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/handler/AbstractRowWriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractRowWriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/AbstractRowWriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractRowWriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/handler/AbstractSheetWriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractSheetWriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/AbstractSheetWriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractSheetWriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/handler/AbstractWorkbookWriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractWorkbookWriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/AbstractWorkbookWriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/AbstractWorkbookWriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/handler/CellWriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/CellWriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/CellWriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/CellWriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/handler/DefaultWriteHandlerLoader.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/DefaultWriteHandlerLoader.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/DefaultWriteHandlerLoader.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/DefaultWriteHandlerLoader.java diff --git a/src/main/java/com/alibaba/excel/write/handler/RowWriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/RowWriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/RowWriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/RowWriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/handler/SheetWriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/SheetWriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/SheetWriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/SheetWriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/handler/WorkbookWriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/WorkbookWriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/WorkbookWriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/WorkbookWriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/handler/WriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/WriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/WriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/WriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/handler/chain/CellHandlerExecutionChain.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/CellHandlerExecutionChain.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/chain/CellHandlerExecutionChain.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/CellHandlerExecutionChain.java diff --git a/src/main/java/com/alibaba/excel/write/handler/chain/RowHandlerExecutionChain.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/RowHandlerExecutionChain.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/chain/RowHandlerExecutionChain.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/RowHandlerExecutionChain.java diff --git a/src/main/java/com/alibaba/excel/write/handler/chain/SheetHandlerExecutionChain.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/SheetHandlerExecutionChain.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/chain/SheetHandlerExecutionChain.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/SheetHandlerExecutionChain.java diff --git a/src/main/java/com/alibaba/excel/write/handler/chain/WorkbookHandlerExecutionChain.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/WorkbookHandlerExecutionChain.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/chain/WorkbookHandlerExecutionChain.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/chain/WorkbookHandlerExecutionChain.java diff --git a/src/main/java/com/alibaba/excel/write/handler/context/CellWriteHandlerContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/CellWriteHandlerContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/context/CellWriteHandlerContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/CellWriteHandlerContext.java diff --git a/src/main/java/com/alibaba/excel/write/handler/context/RowWriteHandlerContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/RowWriteHandlerContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/context/RowWriteHandlerContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/RowWriteHandlerContext.java diff --git a/src/main/java/com/alibaba/excel/write/handler/context/SheetWriteHandlerContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/SheetWriteHandlerContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/context/SheetWriteHandlerContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/SheetWriteHandlerContext.java diff --git a/src/main/java/com/alibaba/excel/write/handler/context/WorkbookWriteHandlerContext.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/WorkbookWriteHandlerContext.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/context/WorkbookWriteHandlerContext.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/context/WorkbookWriteHandlerContext.java diff --git a/src/main/java/com/alibaba/excel/write/handler/impl/DefaultRowWriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/DefaultRowWriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/impl/DefaultRowWriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/DefaultRowWriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/handler/impl/DimensionWorkbookWriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/DimensionWorkbookWriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/impl/DimensionWorkbookWriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/DimensionWorkbookWriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/handler/impl/FillStyleCellWriteHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/FillStyleCellWriteHandler.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/handler/impl/FillStyleCellWriteHandler.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/handler/impl/FillStyleCellWriteHandler.java diff --git a/src/main/java/com/alibaba/excel/write/merge/AbstractMergeStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/merge/AbstractMergeStrategy.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/merge/AbstractMergeStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/merge/AbstractMergeStrategy.java diff --git a/src/main/java/com/alibaba/excel/write/merge/LoopMergeStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/merge/LoopMergeStrategy.java similarity index 95% rename from src/main/java/com/alibaba/excel/write/merge/LoopMergeStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/merge/LoopMergeStrategy.java index 961db51f..79db35b7 100644 --- a/src/main/java/com/alibaba/excel/write/merge/LoopMergeStrategy.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/merge/LoopMergeStrategy.java @@ -15,15 +15,15 @@ public class LoopMergeStrategy implements RowWriteHandler { /** * Each row */ - private int eachRow; + private final int eachRow; /** * Extend column */ - private int columnExtend; + private final int columnExtend; /** * The number of the current column */ - private int columnIndex; + private final int columnIndex; public LoopMergeStrategy(int eachRow, int columnIndex) { this(eachRow, 1, columnIndex); diff --git a/src/main/java/com/alibaba/excel/write/merge/OnceAbsoluteMergeStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/merge/OnceAbsoluteMergeStrategy.java similarity index 90% rename from src/main/java/com/alibaba/excel/write/merge/OnceAbsoluteMergeStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/merge/OnceAbsoluteMergeStrategy.java index 0fe3dd61..273d8879 100644 --- a/src/main/java/com/alibaba/excel/write/merge/OnceAbsoluteMergeStrategy.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/merge/OnceAbsoluteMergeStrategy.java @@ -3,7 +3,6 @@ package com.alibaba.excel.write.merge; import org.apache.poi.ss.util.CellRangeAddress; import com.alibaba.excel.metadata.property.OnceAbsoluteMergeProperty; -import com.alibaba.excel.write.handler.AbstractSheetWriteHandler; import com.alibaba.excel.write.handler.SheetWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; @@ -17,19 +16,19 @@ public class OnceAbsoluteMergeStrategy implements SheetWriteHandler { /** * First row */ - private int firstRowIndex; + private final int firstRowIndex; /** * Last row */ - private int lastRowIndex; + private final int lastRowIndex; /** * First column */ - private int firstColumnIndex; + private final int firstColumnIndex; /** * Last row */ - private int lastColumnIndex; + private final int lastColumnIndex; public OnceAbsoluteMergeStrategy(int firstRowIndex, int lastRowIndex, int firstColumnIndex, int lastColumnIndex) { if (firstRowIndex < 0 || lastRowIndex < 0 || firstColumnIndex < 0 || lastColumnIndex < 0) { diff --git a/src/main/java/com/alibaba/excel/write/metadata/CollectionRowData.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/CollectionRowData.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/CollectionRowData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/CollectionRowData.java diff --git a/src/main/java/com/alibaba/excel/write/metadata/MapRowData.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/MapRowData.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/MapRowData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/MapRowData.java diff --git a/src/main/java/com/alibaba/excel/write/metadata/RowData.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/RowData.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/RowData.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/RowData.java diff --git a/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteBasicParameter.java diff --git a/src/main/java/com/alibaba/excel/write/metadata/WriteSheet.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteSheet.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/WriteSheet.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteSheet.java diff --git a/src/main/java/com/alibaba/excel/write/metadata/WriteTable.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteTable.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/WriteTable.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteTable.java diff --git a/src/main/java/com/alibaba/excel/write/metadata/WriteWorkbook.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteWorkbook.java similarity index 97% rename from src/main/java/com/alibaba/excel/write/metadata/WriteWorkbook.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteWorkbook.java index 38b368ec..16f2a7ca 100644 --- a/src/main/java/com/alibaba/excel/write/metadata/WriteWorkbook.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/WriteWorkbook.java @@ -37,7 +37,8 @@ public class WriteWorkbook extends WriteBasicParameter { */ private OutputStream outputStream; /** - * output charset + * charset. + * Only work on the CSV file */ private Charset charset; /** diff --git a/src/main/java/com/alibaba/excel/write/metadata/fill/AnalysisCell.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/fill/AnalysisCell.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/fill/AnalysisCell.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/fill/AnalysisCell.java diff --git a/src/main/java/com/alibaba/excel/write/metadata/fill/FillConfig.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/fill/FillConfig.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/fill/FillConfig.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/fill/FillConfig.java diff --git a/src/main/java/com/alibaba/excel/write/metadata/fill/FillWrapper.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/fill/FillWrapper.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/fill/FillWrapper.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/fill/FillWrapper.java diff --git a/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 similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java diff --git a/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 similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java diff --git a/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java diff --git a/src/main/java/com/alibaba/excel/write/metadata/holder/WriteTableHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteTableHolder.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/holder/WriteTableHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteTableHolder.java diff --git a/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 similarity index 99% rename from src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java index ec8e3349..e64b8e38 100644 --- a/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 @@ -80,7 +80,8 @@ public class WriteWorkbookHolder extends AbstractWriteHolder { */ private OutputStream outputStream; /** - * output charset + * charset. + * Only work on the CSV file */ private Charset charset; /** diff --git a/src/main/java/com/alibaba/excel/write/metadata/style/WriteCellStyle.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/style/WriteCellStyle.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/style/WriteCellStyle.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/style/WriteCellStyle.java diff --git a/src/main/java/com/alibaba/excel/write/metadata/style/WriteFont.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/style/WriteFont.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/metadata/style/WriteFont.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/metadata/style/WriteFont.java diff --git a/src/main/java/com/alibaba/excel/write/property/ExcelWriteHeadProperty.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/property/ExcelWriteHeadProperty.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/property/ExcelWriteHeadProperty.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/property/ExcelWriteHeadProperty.java diff --git a/src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/style/AbstractCellStyleStrategy.java diff --git a/src/main/java/com/alibaba/excel/write/style/AbstractVerticalCellStyleStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/AbstractVerticalCellStyleStrategy.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/style/AbstractVerticalCellStyleStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/style/AbstractVerticalCellStyleStrategy.java diff --git a/src/main/java/com/alibaba/excel/write/style/DefaultStyle.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/DefaultStyle.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/style/DefaultStyle.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/style/DefaultStyle.java diff --git a/src/main/java/com/alibaba/excel/write/style/HorizontalCellStyleStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/HorizontalCellStyleStrategy.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/style/HorizontalCellStyleStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/style/HorizontalCellStyleStrategy.java diff --git a/src/main/java/com/alibaba/excel/write/style/column/AbstractColumnWidthStyleStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/AbstractColumnWidthStyleStrategy.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/style/column/AbstractColumnWidthStyleStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/AbstractColumnWidthStyleStrategy.java diff --git a/src/main/java/com/alibaba/excel/write/style/column/AbstractHeadColumnWidthStyleStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/AbstractHeadColumnWidthStyleStrategy.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/style/column/AbstractHeadColumnWidthStyleStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/AbstractHeadColumnWidthStyleStrategy.java diff --git a/src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java similarity index 90% rename from src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java index d248de13..ee47fbfb 100644 --- a/src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java @@ -35,11 +35,7 @@ public class LongestMatchColumnWidthStyleStrategy extends AbstractColumnWidthSty if (!needSetWidth) { return; } - Map maxColumnWidthMap = cache.get(writeSheetHolder.getSheetNo()); - if (maxColumnWidthMap == null) { - maxColumnWidthMap = new HashMap(16); - cache.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap); - } + Map maxColumnWidthMap = cache.computeIfAbsent(writeSheetHolder.getSheetNo(), key -> new HashMap<>(16)); Integer columnWidth = dataLength(cellDataList, cell, isHead); if (columnWidth < 0) { return; diff --git a/src/main/java/com/alibaba/excel/write/style/column/SimpleColumnWidthStyleStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/SimpleColumnWidthStyleStrategy.java similarity index 93% rename from src/main/java/com/alibaba/excel/write/style/column/SimpleColumnWidthStyleStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/SimpleColumnWidthStyleStrategy.java index 316ff2c8..5db857d5 100644 --- a/src/main/java/com/alibaba/excel/write/style/column/SimpleColumnWidthStyleStrategy.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/column/SimpleColumnWidthStyleStrategy.java @@ -8,7 +8,7 @@ import com.alibaba.excel.metadata.Head; * @author Jiaju Zhuang */ public class SimpleColumnWidthStyleStrategy extends AbstractHeadColumnWidthStyleStrategy { - private Integer columnWidth; + private final Integer columnWidth; /** * diff --git a/src/main/java/com/alibaba/excel/write/style/row/AbstractRowHeightStyleStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/row/AbstractRowHeightStyleStrategy.java similarity index 100% rename from src/main/java/com/alibaba/excel/write/style/row/AbstractRowHeightStyleStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/style/row/AbstractRowHeightStyleStrategy.java diff --git a/src/main/java/com/alibaba/excel/write/style/row/SimpleRowHeightStyleStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/row/SimpleRowHeightStyleStrategy.java similarity index 91% rename from src/main/java/com/alibaba/excel/write/style/row/SimpleRowHeightStyleStrategy.java rename to easyexcel-core/src/main/java/com/alibaba/excel/write/style/row/SimpleRowHeightStyleStrategy.java index 313cf21c..028707f3 100644 --- a/src/main/java/com/alibaba/excel/write/style/row/SimpleRowHeightStyleStrategy.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/style/row/SimpleRowHeightStyleStrategy.java @@ -8,8 +8,8 @@ import org.apache.poi.ss.usermodel.Row; * @author Jiaju Zhuang */ public class SimpleRowHeightStyleStrategy extends AbstractRowHeightStyleStrategy { - private Short headRowHeight; - private Short contentRowHeight; + private final Short headRowHeight; + private final Short contentRowHeight; public SimpleRowHeightStyleStrategy(Short headRowHeight, Short contentRowHeight) { this.headRowHeight = headRowHeight; diff --git a/src/main/java/org/apache/poi/hssf/usermodel/PoiUtils.java b/easyexcel-core/src/main/java/org/apache/poi/hssf/usermodel/PoiUtils.java similarity index 100% rename from src/main/java/org/apache/poi/hssf/usermodel/PoiUtils.java rename to easyexcel-core/src/main/java/org/apache/poi/hssf/usermodel/PoiUtils.java diff --git a/easyexcel-support/README.md b/easyexcel-support/README.md new file mode 100644 index 00000000..580f05d0 --- /dev/null +++ b/easyexcel-support/README.md @@ -0,0 +1,3 @@ +# easyexcel-support + +外部依赖的代码,目前就一个cglib,由于cglib不支持jdk高版本,所以单独复制了一份 \ No newline at end of file diff --git a/easyexcel-support/pom.xml b/easyexcel-support/pom.xml new file mode 100644 index 00000000..d15b0d7a --- /dev/null +++ b/easyexcel-support/pom.xml @@ -0,0 +1,90 @@ + + + 4.0.0 + + + com.alibaba + easyexcel-parent + ${revision} + ../pom.xml + + + jar + easyexcel-support + + + + org.springframework + spring-core + + + org.springframework + spring-jcl + + + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + true + false + true + + true + + + org.springframework:spring-core + + + + + org.springframework:spring-core + + org/springframework/asm/** + org/springframework/cglib/** + + + + + + + + + + org.codehaus.mojo + flatten-maven-plugin + + + flatten.process-resources + process-resources + + flatten + + + + flatten + package + + flatten + + + + + + + + diff --git a/easyexcel-support/src/main/java/com/alibaba/excel/support/Empty.java b/easyexcel-support/src/main/java/com/alibaba/excel/support/Empty.java new file mode 100644 index 00000000..82d9b080 --- /dev/null +++ b/easyexcel-support/src/main/java/com/alibaba/excel/support/Empty.java @@ -0,0 +1,9 @@ +package com.alibaba.excel.support; + +/** + * empty + * + * @author Jiaju Zhuang + */ +public class Empty { +} diff --git a/easyexcel-test/README.md b/easyexcel-test/README.md new file mode 100644 index 00000000..299588a0 --- /dev/null +++ b/easyexcel-test/README.md @@ -0,0 +1,3 @@ +# easyexcel-test + +测试案例 \ No newline at end of file diff --git a/easyexcel-test/pom.xml b/easyexcel-test/pom.xml new file mode 100644 index 00000000..f802f249 --- /dev/null +++ b/easyexcel-test/pom.xml @@ -0,0 +1,65 @@ + + + 4.0.0 + + + com.alibaba + easyexcel-parent + ${revision} + ../pom.xml + + + jar + easyexcel-test + + + true + + + + + com.alibaba + easyexcel-core + test + + + ch.qos.logback + logback-classic + test + + + com.alibaba + fastjson + test + + + org.springframework.boot + spring-boot-starter-web + test + + + junit + junit + test + + + + + + + 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 + + true + + + + + diff --git a/src/test/java/com/alibaba/easyexcel/test/core/StyleTestUtils.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/StyleTestUtils.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/StyleTestUtils.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/StyleTestUtils.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataTest.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataTest.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationStyleData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationStyleData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationStyleData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationStyleData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataTest.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataReadData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataReadData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataReadData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataReadData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataWriteData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataWriteData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataWriteData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/celldata/CellDataWriteData.java diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/charset/CharsetData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/charset/CharsetData.java new file mode 100644 index 00000000..234ec484 --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/charset/CharsetData.java @@ -0,0 +1,17 @@ +package com.alibaba.easyexcel.test.core.charset; + +import com.alibaba.excel.annotation.ExcelProperty; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +public class CharsetData { + @ExcelProperty("姓名") + private String name; + @ExcelProperty("年纪") + private Integer age; +} diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/charset/CharsetDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/charset/CharsetDataTest.java new file mode 100644 index 00000000..7ac39173 --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/charset/CharsetDataTest.java @@ -0,0 +1,110 @@ +package com.alibaba.easyexcel.test.core.charset; + +import java.io.File; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; + +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 lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.utils.Lists; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +/** + * charset + * + * @author Jiaju Zhuang + */ +@Slf4j +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class CharsetDataTest { + private static final Charset GBK = Charset.forName("GBK"); + private static File fileCsvGbk; + private static File fileCsvUtf8; + private static File fileCsvError; + + @BeforeClass + public static void init() { + fileCsvGbk = TestFileUtil.createNewFile("charset" + File.separator + "fileCsvGbk.csv"); + fileCsvUtf8 = TestFileUtil.createNewFile("charset" + File.separator + "fileCsvUtf8.csv"); + fileCsvError = TestFileUtil.createNewFile("charset" + File.separator + "fileCsvError.csv"); + } + + @Test + public void t01ReadAndWriteCsv() { + readAndWrite(fileCsvGbk, GBK); + readAndWrite(fileCsvUtf8, StandardCharsets.UTF_8); + } + + @Test + public void t02ReadAndWriteCsvError() { + EasyExcel.write(fileCsvError, CharsetData.class).charset(GBK).sheet().doWrite(data()); + EasyExcel.read(fileCsvError, CharsetData.class, new ReadListener() { + + private final List dataList = Lists.newArrayList(); + + @Override + public void invokeHead(Map> headMap, AnalysisContext context) { + String head = headMap.get(0).getStringValue(); + Assert.assertNotEquals("姓名", head); + } + + @Override + public void invoke(CharsetData data, AnalysisContext context) { + dataList.add(data); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + } + }).charset(StandardCharsets.UTF_8).sheet().doRead(); + } + + private void readAndWrite(File file, Charset charset) { + EasyExcel.write(file, CharsetData.class).charset(charset).sheet().doWrite(data()); + EasyExcel.read(file, CharsetData.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(CharsetData data, AnalysisContext context) { + dataList.add(data); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + Assert.assertEquals(dataList.size(), 10); + CharsetData charsetData = dataList.get(0); + Assert.assertEquals("姓名0", charsetData.getName()); + Assert.assertEquals(0, (long)charsetData.getAge()); + } + }).charset(charset).sheet().doRead(); + } + + private List data() { + List list = Lists.newArrayList(); + for (int i = 0; i < 10; i++) { + CharsetData data = new CharsetData(); + data.setName("姓名" + i); + data.setAge(i); + list.add(data); + } + return list; + } +} 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 new file mode 100644 index 00000000..027aa54f --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java @@ -0,0 +1,33 @@ +package com.alibaba.easyexcel.test.core.compatibility; + +import java.util.List; +import java.util.Map; + +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Assert; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +/** + * Compatible with some special files + * + * @author Jiaju Zhuang + */ +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +@Slf4j +public class CompatibilityTest { + + @Test + public void t01() { + // https://github.com/alibaba/easyexcel/issues/2236 + List> list = EasyExcel.read(TestFileUtil.getPath() + "compatibility/t01.xls").sheet() + .doReadSync(); + Assert.assertEquals(2, list.size()); + Map row1 = list.get(1); + Assert.assertEquals("Q235(碳钢)", row1.get(0)); + } +} diff --git a/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 similarity index 96% rename from src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java index 0a71d25a..fc353ba2 100644 --- a/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 @@ -21,7 +21,7 @@ import org.slf4j.LoggerFactory; */ public class ConverterDataListener extends AnalysisEventListener { private static final Logger LOGGER = LoggerFactory.getLogger(ConverterDataListener.class); - private List list = new ArrayList<>(); + private final List list = new ArrayList<>(); @Override public void invoke(ConverterReadData data, AnalysisContext context) { diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataTest.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterReadData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterReadData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterReadData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterReadData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterTest.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterWriteData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterWriteData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterWriteData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterWriteData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ImageData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ImageData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/converter/ImageData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ImageData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataListener.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataListener.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionThrowDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionThrowDataListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionThrowDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/exception/ExceptionThrowDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeData.java diff --git a/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 similarity index 71% rename from src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/excludeorinclude/ExcludeOrIncludeDataTest.java index 54d9d5a4..9bf69821 100644 --- a/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 @@ -25,30 +25,30 @@ public class ExcludeOrIncludeDataTest { private static File excludeIndex07; private static File excludeIndex03; private static File excludeIndexCsv; - private static File excludeFiledName07; - private static File excludeFiledName03; - private static File excludeFiledNameCsv; + private static File excludeFieldName07; + private static File excludeFieldName03; + private static File excludeFieldNameCsv; private static File includeIndex07; private static File includeIndex03; private static File includeIndexCsv; - private static File includeFiledName07; - private static File includeFiledName03; - private static File includeFiledNameCsv; + private static File includeFieldName07; + private static File includeFieldName03; + private static File includeFieldNameCsv; @BeforeClass public static void init() { excludeIndex07 = TestFileUtil.createNewFile("excludeIndex.xlsx"); excludeIndex03 = TestFileUtil.createNewFile("excludeIndex.xls"); excludeIndexCsv = TestFileUtil.createNewFile("excludeIndex.csv"); - excludeFiledName07 = TestFileUtil.createNewFile("excludeFiledName.xlsx"); - excludeFiledName03 = TestFileUtil.createNewFile("excludeFiledName.xls"); - excludeFiledNameCsv = TestFileUtil.createNewFile("excludeFiledName.csv"); + excludeFieldName07 = TestFileUtil.createNewFile("excludeFieldName.xlsx"); + excludeFieldName03 = TestFileUtil.createNewFile("excludeFieldName.xls"); + excludeFieldNameCsv = TestFileUtil.createNewFile("excludeFieldName.csv"); includeIndex07 = TestFileUtil.createNewFile("includeIndex.xlsx"); includeIndex03 = TestFileUtil.createNewFile("includeIndex.xls"); includeIndexCsv = TestFileUtil.createNewFile("includeIndex.csv"); - includeFiledName07 = TestFileUtil.createNewFile("includeFiledName.xlsx"); - includeFiledName03 = TestFileUtil.createNewFile("includeFiledName.xls"); - includeFiledNameCsv = TestFileUtil.createNewFile("includeFiledName.csv"); + includeFieldName07 = TestFileUtil.createNewFile("includeFieldName.xlsx"); + includeFieldName03 = TestFileUtil.createNewFile("includeFieldName.xls"); + includeFieldNameCsv = TestFileUtil.createNewFile("includeFieldName.csv"); } @Test @@ -67,18 +67,18 @@ public class ExcludeOrIncludeDataTest { } @Test - public void t11ExcludeFiledName07() { - excludeFiledName(excludeFiledName07); + public void t11ExcludeFieldName07() { + excludeFieldName(excludeFieldName07); } @Test - public void t12ExcludeFiledName03() { - excludeFiledName(excludeFiledName03); + public void t12ExcludeFieldName03() { + excludeFieldName(excludeFieldName03); } @Test - public void t13ExcludeFiledNameCsv() { - excludeFiledName(excludeFiledNameCsv); + public void t13ExcludeFieldNameCsv() { + excludeFieldName(excludeFieldNameCsv); } @@ -98,18 +98,18 @@ public class ExcludeOrIncludeDataTest { } @Test - public void t31IncludeFiledName07() { - includeFiledName(includeFiledName07); + public void t31IncludeFieldName07() { + includeFieldName(includeFieldName07); } @Test - public void t32IncludeFiledName03() { - includeFiledName(includeFiledName03); + public void t32IncludeFieldName03() { + includeFieldName(includeFieldName03); } @Test - public void t33IncludeFiledNameCsv() { - includeFiledName(includeFiledNameCsv); + public void t33IncludeFieldNameCsv() { + includeFieldName(includeFieldNameCsv); } private void excludeIndex(File file) { @@ -127,12 +127,12 @@ public class ExcludeOrIncludeDataTest { } - private void excludeFiledName(File file) { - Set excludeColumnFiledNames = new HashSet(); - excludeColumnFiledNames.add("column1"); - excludeColumnFiledNames.add("column3"); - excludeColumnFiledNames.add("column4"); - EasyExcel.write(file, ExcludeOrIncludeData.class).excludeColumnFiledNames(excludeColumnFiledNames).sheet() + private void excludeFieldName(File file) { + Set excludeColumnFieldNames = new HashSet(); + excludeColumnFieldNames.add("column1"); + excludeColumnFieldNames.add("column3"); + excludeColumnFieldNames.add("column4"); + EasyExcel.write(file, ExcludeOrIncludeData.class).excludeColumnFieldNames(excludeColumnFieldNames).sheet() .doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); Assert.assertEquals(1, dataMap.size()); @@ -157,11 +157,11 @@ public class ExcludeOrIncludeDataTest { } - private void includeFiledName(File file) { - Set includeColumnFiledNames = new HashSet(); - includeColumnFiledNames.add("column2"); - includeColumnFiledNames.add("column3"); - EasyExcel.write(file, ExcludeOrIncludeData.class).includeColumnFiledNames(includeColumnFiledNames).sheet() + private void includeFieldName(File file) { + Set includeColumnFieldNames = new HashSet(); + includeColumnFieldNames.add("column2"); + includeColumnFieldNames.add("column3"); + EasyExcel.write(file, ExcludeOrIncludeData.class).includeColumnFieldNames(includeColumnFieldNames).sheet() .doWrite(data()); List> dataMap = EasyExcel.read(file).sheet().doReadSync(); Assert.assertEquals(1, dataMap.size()); diff --git a/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataListener.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/extra/ExtraDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/fill/FillData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/FillData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/fill/FillData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/FillData.java diff --git a/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 similarity index 76% rename from src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java index e85d63a6..90772691 100644 --- a/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 @@ -142,20 +142,20 @@ public class FillDataTest { } private void compositeFill(File file, File template) { - ExcelWriter excelWriter = EasyExcel.write(file).withTemplate(template).build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - - FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); - excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet); - excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet); - excelWriter.fill(new FillWrapper("data2", data()), writeSheet); - excelWriter.fill(new FillWrapper("data2", data()), writeSheet); - excelWriter.fill(new FillWrapper("data3", data()), writeSheet); - excelWriter.fill(new FillWrapper("data3", data()), writeSheet); - Map map = new HashMap(); - map.put("date", "2019年10月9日13:28:28"); - excelWriter.fill(map, writeSheet); - excelWriter.finish(); + try (ExcelWriter excelWriter = EasyExcel.write(file).withTemplate(template).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); + excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet); + excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet); + excelWriter.fill(new FillWrapper("data2", data()), writeSheet); + excelWriter.fill(new FillWrapper("data2", data()), writeSheet); + excelWriter.fill(new FillWrapper("data3", data()), writeSheet); + excelWriter.fill(new FillWrapper("data3", data()), writeSheet); + Map map = new HashMap(); + map.put("date", "2019年10月9日13:28:28"); + excelWriter.fill(map, writeSheet); + } List list = EasyExcel.read(file).ignoreEmptyRow(false).sheet().headRowNumber(0).doReadSync(); Map map0 = (Map)list.get(0); @@ -167,15 +167,16 @@ public class FillDataTest { } private void horizontalFill(File file, File template) { - ExcelWriter excelWriter = EasyExcel.write(file).withTemplate(template).build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); - excelWriter.fill(data(), fillConfig, writeSheet); - excelWriter.fill(data(), fillConfig, writeSheet); - Map map = new HashMap(); - map.put("date", "2019年10月9日13:28:28"); - excelWriter.fill(map, writeSheet); - excelWriter.finish(); + try (ExcelWriter excelWriter = EasyExcel.write(file).withTemplate(template).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); + excelWriter.fill(data(), fillConfig, writeSheet); + excelWriter.fill(data(), fillConfig, writeSheet); + Map map = new HashMap(); + map.put("date", "2019年10月9日13:28:28"); + excelWriter.fill(map, writeSheet); + excelWriter.finish(); + } List list = EasyExcel.read(file).sheet().headRowNumber(0).doReadSync(); Assert.assertEquals(list.size(), 5L); @@ -184,16 +185,16 @@ public class FillDataTest { } private void complexFill(File file, File template) { - ExcelWriter excelWriter = EasyExcel.write(file).withTemplate(template).build(); - WriteSheet writeSheet = EasyExcel.writerSheet().registerWriteHandler(new LoopMergeStrategy(2, 0)).build(); - FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); - excelWriter.fill(data(), fillConfig, writeSheet); - excelWriter.fill(data(), fillConfig, writeSheet); - Map map = new HashMap(); - map.put("date", "2019年10月9日13:28:28"); - map.put("total", 1000); - excelWriter.fill(map, writeSheet); - excelWriter.finish(); + try (ExcelWriter excelWriter = EasyExcel.write(file).withTemplate(template).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().registerWriteHandler(new LoopMergeStrategy(2, 0)).build(); + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + excelWriter.fill(data(), fillConfig, writeSheet); + excelWriter.fill(data(), fillConfig, writeSheet); + Map map = new HashMap(); + map.put("date", "2019年10月9日13:28:28"); + map.put("total", 1000); + excelWriter.fill(map, writeSheet); + } List list = EasyExcel.read(file).sheet().headRowNumber(3).doReadSync(); Assert.assertEquals(list.size(), 21L); Map map19 = (Map)list.get(19); diff --git a/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationData.java similarity index 84% rename from src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationData.java index bc4c2483..87e2bfae 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationData.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationData.java @@ -7,6 +7,7 @@ import com.alibaba.excel.annotation.format.DateTimeFormat; import com.alibaba.excel.annotation.format.NumberFormat; import com.alibaba.excel.annotation.write.style.ContentLoopMerge; import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.converters.string.StringImageConverter; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -33,4 +34,6 @@ public class FillAnnotationData { private String string1; @ExcelProperty("字符串2") private String string2; + @ExcelProperty(value = "图片", converter = StringImageConverter.class) + private String image; } 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 new file mode 100644 index 00000000..8d1d56bc --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationDataTest.java @@ -0,0 +1,122 @@ +package com.alibaba.easyexcel.test.core.fill.annotation; + +import java.io.File; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.util.DateUtils; + +import org.apache.poi.hssf.usermodel.HSSFClientAnchor; +import org.apache.poi.hssf.usermodel.HSSFPicture; +import org.apache.poi.hssf.usermodel.HSSFShape; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.ss.usermodel.Cell; +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.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.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; + +/** + * @author Jiaju Zhuang + */ +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class FillAnnotationDataTest { + + private static File file07; + private static File file03; + private static File fileTemplate07; + private static File fileTemplate03; + + @BeforeClass + public static void init() { + file07 = TestFileUtil.createNewFile("fillAnnotation07.xlsx"); + file03 = TestFileUtil.createNewFile("fillAnnotation03.xls"); + fileTemplate07 = TestFileUtil.readFile("fill" + File.separator + "annotation.xlsx"); + fileTemplate03 = TestFileUtil.readFile("fill" + File.separator + "annotation.xls"); + } + + @Test + public void t01ReadAndWrite07() throws Exception { + readAndWrite(file07, fileTemplate07); + } + + @Test + public void t02ReadAndWrite03() throws Exception { + readAndWrite(file03, fileTemplate03); + } + + private void readAndWrite(File file, File fileTemplate) throws Exception { + EasyExcel.write().file(file).head(FillAnnotationData.class).withTemplate(fileTemplate).sheet().doFill(data()); + + try (Workbook workbook = WorkbookFactory.create(file)) { + Sheet sheet = workbook.getSheetAt(0); + + Row row1 = sheet.getRow(1); + Assert.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()); + String dataFormatString = cell10.getCellStyle().getDataFormatString(); + Assert.assertEquals("yyyy年MM月dd日HH时mm分ss秒", dataFormatString); + Cell cell11 = row1.getCell(1); + Assert.assertEquals(99.99, cell11.getNumericCellValue(), 2); + boolean hasMerge = false; + for (CellRangeAddress mergedRegion : sheet.getMergedRegions()) { + if (mergedRegion.getFirstRow() == 1 && mergedRegion.getLastRow() == 1 + && mergedRegion.getFirstColumn() == 2 && mergedRegion.getLastColumn() == 3) { + hasMerge = true; + break; + } + } + Assert.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); + XSSFPicture picture0 = (XSSFPicture)shape0; + CTMarker ctMarker0 = picture0.getPreferredSize().getFrom(); + Assert.assertEquals(1, ctMarker0.getRow()); + Assert.assertEquals(4, ctMarker0.getCol()); + } else { + HSSFSheet hssfSheet = (HSSFSheet)sheet; + List shapeList = hssfSheet.getDrawingPatriarch().getChildren(); + HSSFShape shape0 = shapeList.get(0); + Assert.assertTrue(shape0 instanceof HSSFPicture); + HSSFPicture picture0 = (HSSFPicture)shape0; + HSSFClientAnchor anchor = (HSSFClientAnchor)picture0.getAnchor(); + Assert.assertEquals(1, anchor.getRow1()); + Assert.assertEquals(4, anchor.getCol1()); + } + } + } + + private List data() throws Exception { + List list = new ArrayList<>(); + FillAnnotationData data = new FillAnnotationData(); + data.setDate(DateUtils.parseDate("2020-01-01 01:01:01")); + data.setNumber(99.99); + data.setString1("string1"); + data.setString2("string2"); + data.setImage(TestFileUtil.getPath() + "converter" + File.separator + "img.jpg"); + list.add(data); + list.add(data); + list.add(data); + list.add(data); + list.add(data); + return list; + } +} diff --git a/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleAnnotatedTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/fill/style/FillStyleDataTest.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandler.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandler.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/handler/WriteHandlerTest.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/head/ComplexDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ComplexHeadDataTest.java diff --git a/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 similarity index 65% rename from src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataListener.java index c57976a9..58660c90 100644 --- a/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 @@ -4,22 +4,32 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.read.listener.ReadListener; +import com.alibaba.fastjson.JSON; + 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.fastjson.JSON; - /** * @author Jiaju Zhuang */ -public class ListHeadDataListener extends AnalysisEventListener> { +public class ListHeadDataListener implements ReadListener> { private static final Logger LOGGER = LoggerFactory.getLogger(NoHeadData.class); List> list = new ArrayList>(); + @Override + public void invokeHead(Map> headMap, AnalysisContext context) { + Assert.assertNotNull(context.readRowHolder().getRowIndex()); + headMap.forEach((key, value) -> { + Assert.assertEquals(value.getRowIndex(), context.readRowHolder().getRowIndex()); + Assert.assertEquals(value.getColumnIndex(), key); + }); + } + @Override public void invoke(Map data, AnalysisContext context) { list.add(data); diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/ListHeadDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataListener.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/head/NoHeadDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/large/LargeData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/large/LargeData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataListener.java diff --git a/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 similarity index 90% rename from src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java index c7f202e5..d8acbba5 100644 --- a/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 @@ -57,26 +57,26 @@ public class LargeDataTest { @Test public void t02Fill() { - ExcelWriter excelWriter = EasyExcel.write(fileFill07).withTemplate(template07).build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - for (int j = 0; j < 5000; j++) { - excelWriter.fill(data(), writeSheet); - LOGGER.info("{} fill success.", j); + try (ExcelWriter excelWriter = EasyExcel.write(fileFill07).withTemplate(template07).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + for (int j = 0; j < 5000; j++) { + excelWriter.fill(data(), writeSheet); + LOGGER.info("{} fill success.", j); + } } - excelWriter.finish(); } @Test public void t03ReadAndWriteCsv() { // write long start = System.currentTimeMillis(); - ExcelWriter excelWriter = EasyExcel.write(fileCsv).build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - for (int j = 0; j < 5000; j++) { - excelWriter.write(data(), writeSheet); - LOGGER.info("{} write success.", j); + try (ExcelWriter excelWriter = EasyExcel.write(fileCsv).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + for (int j = 0; j < 5000; j++) { + excelWriter.write(data(), writeSheet); + LOGGER.info("{} write success.", j); + } } - excelWriter.finish(); LOGGER.info("CSV large data total time spent:{}", System.currentTimeMillis() - start); // read diff --git a/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsData.java diff --git a/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 similarity index 76% rename from src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsDataTest.java index c69e3ae4..b87decde 100644 --- a/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 @@ -15,7 +15,6 @@ import org.junit.Test; import org.junit.runners.MethodSorters; /** - * * @author Jiaju Zhuang */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) @@ -52,15 +51,15 @@ public class MultipleSheetsDataTest { private void read(File file) { MultipleSheetsListener multipleSheetsListener = new MultipleSheetsListener(); - ExcelReader excelReader = EasyExcel.read(file, MultipleSheetsData.class, multipleSheetsListener).build(); - List sheets = excelReader.excelExecutor().sheetList(); - int count = 1; - for (ReadSheet readSheet : sheets) { - excelReader.read(readSheet); - Assert.assertEquals(multipleSheetsListener.getList().size(), count); - count++; + try (ExcelReader excelReader = EasyExcel.read(file, MultipleSheetsData.class, multipleSheetsListener).build()) { + List sheets = excelReader.excelExecutor().sheetList(); + int count = 1; + for (ReadSheet readSheet : sheets) { + excelReader.read(readSheet); + Assert.assertEquals(multipleSheetsListener.getList().size(), count); + count++; + } } - excelReader.finish(); } private void readAll(File file) { diff --git a/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 similarity index 89% rename from src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/multiplesheets/MultipleSheetsListener.java index f414be28..d7b41582 100644 --- a/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 @@ -7,8 +7,6 @@ import org.junit.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.alibaba.easyexcel.test.core.parameter.ParameterData; -import com.alibaba.easyexcel.test.core.parameter.ParameterDataListener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.fastjson.JSON; diff --git a/src/test/java/com/alibaba/easyexcel/test/core/nomodel/NoModelDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/nomodel/NoModelDataTest.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/nomodel/NoModelDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/nomodel/NoModelDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataListener.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/noncamel/UnCamelDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataListener.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/parameter/ParameterDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataTest.java similarity index 66% rename from src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataTest.java index 70acf19f..7314c67c 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/repetition/RepetitionDataTest.java @@ -56,12 +56,15 @@ public class RepetitionDataTest { } private void readAndWrite(File file) { - ExcelWriter excelWriter = EasyExcel.write(file, RepetitionData.class).build(); - WriteSheet writeSheet = EasyExcel.writerSheet(0).build(); - excelWriter.write(data(), writeSheet).write(data(), writeSheet).finish(); - ExcelReader excelReader = EasyExcel.read(file, RepetitionData.class, new RepetitionDataListener()).build(); - ReadSheet readSheet = EasyExcel.readSheet(0).build(); - excelReader.read(readSheet).finish(); + try (ExcelWriter excelWriter = EasyExcel.write(file, RepetitionData.class).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet(0).build(); + excelWriter.write(data(), writeSheet).write(data(), writeSheet); + } + try (ExcelReader excelReader = EasyExcel.read(file, RepetitionData.class, new RepetitionDataListener()) + .build()) { + ReadSheet readSheet = EasyExcel.readSheet(0).build(); + excelReader.read(readSheet); + } } @Test @@ -80,13 +83,16 @@ public class RepetitionDataTest { } private void readAndWriteTable(File file) { - ExcelWriter excelWriter = EasyExcel.write(file, RepetitionData.class).build(); - WriteSheet writeSheet = EasyExcel.writerSheet(0).build(); - WriteTable writeTable = EasyExcel.writerTable(0).relativeHeadRowIndex(0).build(); - excelWriter.write(data(), writeSheet, writeTable).write(data(), writeSheet, writeTable).finish(); - ExcelReader excelReader = EasyExcel.read(file, RepetitionData.class, new RepetitionDataListener()).build(); - ReadSheet readSheet = EasyExcel.readSheet(0).headRowNumber(2).build(); - excelReader.read(readSheet).finish(); + try (ExcelWriter excelWriter = EasyExcel.write(file, RepetitionData.class).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet(0).build(); + WriteTable writeTable = EasyExcel.writerTable(0).relativeHeadRowIndex(0).build(); + excelWriter.write(data(), writeSheet, writeTable).write(data(), writeSheet, writeTable); + } + try (ExcelReader excelReader = EasyExcel.read(file, RepetitionData.class, new RepetitionDataListener()) + .build()) { + ReadSheet readSheet = EasyExcel.readSheet(0).headRowNumber(2).build(); + excelReader.read(readSheet); + } } private List data() { diff --git a/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataListener.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataSheetNameListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataSheetNameListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataTest.java similarity index 73% rename from src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataTest.java index a381ec43..80277545 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/simple/SimpleDataTest.java @@ -1,11 +1,14 @@ package com.alibaba.easyexcel.test.core.simple; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.support.ExcelTypeEnum; import org.junit.Assert; import org.junit.BeforeClass; @@ -50,6 +53,26 @@ public class SimpleDataTest { EasyExcel.read(file, SimpleData.class, new SimpleDataListener()).sheet().doRead(); } + @Test + public void t04ReadAndWrite07() throws Exception { + readAndWriteInputStream(file07, ExcelTypeEnum.XLSX); + } + + @Test + public void t05ReadAndWrite03() throws Exception { + readAndWriteInputStream(file03, ExcelTypeEnum.XLS); + } + + @Test + public void t06ReadAndWriteCsv() throws Exception { + readAndWriteInputStream(fileCsv, ExcelTypeEnum.CSV); + } + + private void readAndWriteInputStream(File file, ExcelTypeEnum excelTypeEnum) throws Exception { + EasyExcel.write(new FileOutputStream(file), SimpleData.class).excelType(excelTypeEnum).sheet().doWrite(data()); + EasyExcel.read(new FileInputStream(file), SimpleData.class, new SimpleDataListener()).sheet().doRead(); + } + @Test public void t11SynchronousRead07() { synchronousRead(file07); @@ -66,7 +89,7 @@ public class SimpleDataTest { } @Test - public void t05SheetNameRead07() { + public void t21SheetNameRead07() { EasyExcel.read(TestFileUtil.readFile("simple" + File.separator + "simple07.xlsx"), SimpleData.class, new SimpleDataSheetNameListener()).sheet("simple").doRead(); } diff --git a/src/test/java/com/alibaba/easyexcel/test/core/skip/SkipData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/skip/SkipData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/skip/SkipData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/skip/SkipData.java diff --git a/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 similarity index 60% rename from src/test/java/com/alibaba/easyexcel/test/core/skip/SkipDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/skip/SkipDataTest.java index ed9e84df..0d0777e2 100644 --- a/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 @@ -53,32 +53,32 @@ public class SkipDataTest { } private void readAndWrite(File file) { - ExcelWriter excelWriter = EasyExcel.write(file, SimpleData.class).build(); - WriteSheet writeSheet0 = EasyExcel.writerSheet(0, "第一个").build(); - WriteSheet writeSheet1 = EasyExcel.writerSheet(1, "第二个").build(); - WriteSheet writeSheet2 = EasyExcel.writerSheet(2, "第三个").build(); - WriteSheet writeSheet3 = EasyExcel.writerSheet(3, "第四个").build(); - excelWriter.write(data("name1"), writeSheet0); - excelWriter.write(data("name2"), writeSheet1); - excelWriter.write(data("name3"), writeSheet2); - excelWriter.write(data("name4"), writeSheet3); - excelWriter.finish(); + try (ExcelWriter excelWriter = EasyExcel.write(file, SimpleData.class).build();) { + WriteSheet writeSheet0 = EasyExcel.writerSheet(0, "第一个").build(); + WriteSheet writeSheet1 = EasyExcel.writerSheet(1, "第二个").build(); + WriteSheet writeSheet2 = EasyExcel.writerSheet(2, "第三个").build(); + WriteSheet writeSheet3 = EasyExcel.writerSheet(3, "第四个").build(); + excelWriter.write(data("name1"), writeSheet0); + excelWriter.write(data("name2"), writeSheet1); + excelWriter.write(data("name3"), writeSheet2); + excelWriter.write(data("name4"), writeSheet3); + } List list = EasyExcel.read(file, SkipData.class, null).sheet("第二个").doReadSync(); Assert.assertEquals(1, list.size()); Assert.assertEquals("name2", list.get(0).getName()); SyncReadListener syncReadListener = new SyncReadListener(); - ExcelReader excelReader = EasyExcel.read(file, SkipData.class, null).registerReadListener(syncReadListener) - .build(); - ReadSheet readSheet1 = EasyExcel.readSheet("第二个").build(); - 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()); - excelReader.finish(); + try (ExcelReader excelReader = EasyExcel.read(file, SkipData.class, null).registerReadListener(syncReadListener) + .build()) { + ReadSheet readSheet1 = EasyExcel.readSheet("第二个").build(); + 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()); + } } private List data(String name) { diff --git a/src/test/java/com/alibaba/easyexcel/test/core/sort/SortData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/sort/SortData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortData.java diff --git a/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 similarity index 91% rename from src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataListener.java index 227bddfd..4a9df22f 100644 --- a/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 @@ -2,16 +2,13 @@ package com.alibaba.easyexcel.test.core.sort; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.junit.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.alibaba.easyexcel.test.core.simple.SimpleData; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; -import com.alibaba.fastjson.JSON; /** * @author Jiaju Zhuang diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/sort/SortDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/style/StyleData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/style/StyleData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataListener.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/style/StyleDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/template/TemplateData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataListener.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/template/TemplateDataTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/fill/FillData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillData.java 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 new file mode 100644 index 00000000..0c71753e --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java @@ -0,0 +1,361 @@ +package com.alibaba.easyexcel.test.demo.fill; + +import java.io.File; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.enums.WriteDirectionEnum; +import com.alibaba.excel.util.ListUtils; +import com.alibaba.excel.util.MapUtils; +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; + +/** + * 写的填充写法 + * + * @author Jiaju Zhuang + * @since 2.1.1 + */ +@Ignore +public class FillTest { + /** + * 最简单的填充 + * + * @since 2.1.1 + */ + @Test + public void simpleFill() { + // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 + String templateFileName = + TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "simple.xlsx"; + + // 方案1 根据对象填充 + String fileName = TestFileUtil.getPath() + "simpleFill" + System.currentTimeMillis() + ".xlsx"; + // 这里 会填充到第一个sheet, 然后文件流会自动关闭 + FillData fillData = new FillData(); + fillData.setName("张三"); + fillData.setNumber(5.2); + EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(fillData); + + // 方案2 根据Map填充 + fileName = TestFileUtil.getPath() + "simpleFill" + System.currentTimeMillis() + ".xlsx"; + // 这里 会填充到第一个sheet, 然后文件流会自动关闭 + Map map = MapUtils.newHashMap(); + map.put("name", "张三"); + map.put("number", 5.2); + EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map); + } + + /** + * 填充列表 + * + * @since 2.1.1 + */ + @Test + public void listFill() { + // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 + // 填充list 的时候还要注意 模板中{.} 多了个点 表示list + String templateFileName = + TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "list.xlsx"; + + // 方案1 一下子全部放到内存里面 并填充 + String fileName = TestFileUtil.getPath() + "listFill" + System.currentTimeMillis() + ".xlsx"; + // 这里 会填充到第一个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.1 分多次 填充 会使用文件缓存(省内存) 使用 try-with-resources @since 3.1.0 + fileName = TestFileUtil.getPath() + "listFill" + System.currentTimeMillis() + ".xlsx"; + try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + excelWriter.fill(data(), writeSheet); + excelWriter.fill(data(), writeSheet); + } + + // 方案3.2 分多次 填充 会使用文件缓存(省内存) 不使用 try-with-resources + fileName = TestFileUtil.getPath() + "listFill" + System.currentTimeMillis() + ".xlsx"; + ExcelWriter excelWriter = null; + try { + excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + excelWriter.fill(data(), writeSheet); + excelWriter.fill(data(), writeSheet); + } finally { + // 千万别忘记close 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.close(); + } + } + } + + /** + * 复杂的填充 + * + * @since 2.1.1 + */ + @Test + public void complexFill() { + // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 + // {} 代表普通变量 {.} 代表是list的变量 + String templateFileName = + TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "complex.xlsx"; + + String fileName = TestFileUtil.getPath() + "complexFill" + System.currentTimeMillis() + ".xlsx"; + // 方案1 : 使用 try-with-resources @since 3.1.0 + try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。 + // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用 + // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存 + // 如果数据量大 list不是最后一行 参照下一个 + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + excelWriter.fill(data(), fillConfig, writeSheet); + excelWriter.fill(data(), fillConfig, writeSheet); + Map map = MapUtils.newHashMap(); + map.put("date", "2019年10月9日13:28:28"); + map.put("total", 1000); + excelWriter.fill(map, writeSheet); + } + + // 方案2 : 不使用 try-with-resources + ExcelWriter excelWriter = null; + try { + excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。 + // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用 + // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存 + // 如果数据量大 list不是最后一行 参照下一个 + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + excelWriter.fill(data(), fillConfig, writeSheet); + excelWriter.fill(data(), fillConfig, writeSheet); + Map map = MapUtils.newHashMap(); + map.put("date", "2019年10月9日13:28:28"); + map.put("total", 1000); + excelWriter.fill(map, writeSheet); + } finally { + // 千万别忘记close 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.close(); + } + } + } + + /** + * 数据量大的复杂填充 + *

+ * 这里的解决方案是 确保模板list为最后一行,然后再拼接table.还有03版没救,只能刚正面加内存。 + * + * @since 2.1.1 + */ + @Test + public void complexFillWithTable() { + // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 + // {} 代表普通变量 {.} 代表是list的变量 + // 这里模板 删除了list以后的数据,也就是统计的这一行 + String templateFileName = + TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "complexFillWithTable.xlsx"; + + String fileName = TestFileUtil.getPath() + "complexFillWithTable" + System.currentTimeMillis() + ".xlsx"; + + // 方案1 : 使用 try-with-resources @since 3.1.0 + try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + // 直接写入数据 + excelWriter.fill(data(), writeSheet); + excelWriter.fill(data(), writeSheet); + + // 写入list之前的数据 + Map map = new HashMap(); + map.put("date", "2019年10月9日13:28:28"); + excelWriter.fill(map, writeSheet); + + // list 后面还有个统计 想办法手动写入 + // 这里偷懒直接用list 也可以用对象 + List> totalListList = ListUtils.newArrayList(); + List totalList = ListUtils.newArrayList(); + totalListList.add(totalList); + totalList.add(null); + totalList.add(null); + totalList.add(null); + // 第四列 + totalList.add("统计:1000"); + // 这里是write 别和fill 搞错了 + excelWriter.write(totalListList, writeSheet); + // 总体上写法比较复杂 但是也没有想到好的版本 异步的去写入excel 不支持行的删除和移动,也不支持备注这种的写入,所以也排除了可以 + // 新建一个 然后一点点复制过来的方案,最后导致list需要新增行的时候,后面的列的数据没法后移,后续会继续想想解决方案 + } + + // 方案2 : 不使用 try-with-resources + ExcelWriter excelWriter = null; + try { + excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + // 直接写入数据 + excelWriter.fill(data(), writeSheet); + excelWriter.fill(data(), writeSheet); + + // 写入list之前的数据 + Map map = new HashMap(); + map.put("date", "2019年10月9日13:28:28"); + excelWriter.fill(map, writeSheet); + + // list 后面还有个统计 想办法手动写入 + // 这里偷懒直接用list 也可以用对象 + List> totalListList = ListUtils.newArrayList(); + List totalList = ListUtils.newArrayList(); + totalListList.add(totalList); + totalList.add(null); + totalList.add(null); + totalList.add(null); + // 第四列 + totalList.add("统计:1000"); + // 这里是write 别和fill 搞错了 + excelWriter.write(totalListList, writeSheet); + + // 总体上写法比较复杂 但是也没有想到好的版本 异步的去写入excel 不支持行的删除和移动,也不支持备注这种的写入,所以也排除了可以 + // 新建一个 然后一点点复制过来的方案,最后导致list需要新增行的时候,后面的列的数据没法后移,后续会继续想想解决方案 + } finally { + // 千万别忘记close 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.close(); + } + } + } + + /** + * 横向的填充 + * + * @since 2.1.1 + */ + @Test + public void horizontalFill() { + // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 + // {} 代表普通变量 {.} 代表是list的变量 + String templateFileName = + TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "horizontal.xlsx"; + + String fileName = TestFileUtil.getPath() + "horizontalFill" + System.currentTimeMillis() + ".xlsx"; + // 方案1 : 使用 try-with-resources @since 3.1.0 + try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); + excelWriter.fill(data(), fillConfig, writeSheet); + excelWriter.fill(data(), fillConfig, writeSheet); + + Map map = new HashMap<>(); + map.put("date", "2019年10月9日13:28:28"); + excelWriter.fill(map, writeSheet); + } + + // 方案2 : 不使用 try-with-resources + ExcelWriter excelWriter = null; + try { + excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); + excelWriter.fill(data(), fillConfig, writeSheet); + excelWriter.fill(data(), fillConfig, writeSheet); + + Map map = new HashMap(); + map.put("date", "2019年10月9日13:28:28"); + excelWriter.fill(map, writeSheet); + } finally { + // 千万别忘记close 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.close(); + } + } + } + + /** + * 多列表组合填充填充 + * + * @since 2.2.0-beta1 + */ + @Test + public void compositeFill() { + // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 + // {} 代表普通变量 {.} 代表是list的变量 {前缀.} 前缀可以区分不同的list + String templateFileName = + TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "composite.xlsx"; + + String fileName = TestFileUtil.getPath() + "compositeFill" + System.currentTimeMillis() + ".xlsx"; + + // 方案1 : 使用 try-with-resources @since 3.1.0 + try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); + // 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹 + excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet); + excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet); + excelWriter.fill(new FillWrapper("data2", data()), writeSheet); + excelWriter.fill(new FillWrapper("data2", data()), writeSheet); + excelWriter.fill(new FillWrapper("data3", data()), writeSheet); + excelWriter.fill(new FillWrapper("data3", data()), writeSheet); + + Map map = new HashMap(); + //map.put("date", "2019年10月9日13:28:28"); + map.put("date", new Date()); + + excelWriter.fill(map, writeSheet); + } + + // 方案2 : 不使用 try-with-resources + ExcelWriter excelWriter = null; + try { + excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); + // 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹 + excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet); + excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet); + excelWriter.fill(new FillWrapper("data2", data()), writeSheet); + excelWriter.fill(new FillWrapper("data2", data()), writeSheet); + excelWriter.fill(new FillWrapper("data3", data()), writeSheet); + excelWriter.fill(new FillWrapper("data3", data()), writeSheet); + + Map map = new HashMap(); + //map.put("date", "2019年10月9日13:28:28"); + map.put("date", new Date()); + + excelWriter.fill(map, writeSheet); + } finally { + // 千万别忘记close 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.close(); + } + } + } + + private List data() { + List list = ListUtils.newArrayList(); + for (int i = 0; i < 10; i++) { + FillData fillData = new FillData(); + list.add(fillData); + fillData.setName("张三"); + fillData.setNumber(5.2); + fillData.setDate(new Date()); + } + return list; + } +} diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/CellDataDemoHeadDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/CellDataDemoHeadDataListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/CellDataDemoHeadDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/CellDataDemoHeadDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/CellDataReadDemoData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/CellDataReadDemoData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/CellDataReadDemoData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/CellDataReadDemoData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/ConverterData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ConverterData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/ConverterData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ConverterData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/ConverterDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ConverterDataListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/ConverterDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ConverterDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/CustomStringStringConverter.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/CustomStringStringConverter.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/CustomStringStringConverter.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/CustomStringStringConverter.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoDAO.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoDAO.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/DemoDAO.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoDAO.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/DemoData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/DemoDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExceptionListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExceptionListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExceptionListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExceptionListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExtraData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExtraData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExtraData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExtraData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExtraListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoExtraListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoHeadDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoHeadDataListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/DemoHeadDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/DemoHeadDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/ExceptionDemoData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ExceptionDemoData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/ExceptionDemoData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ExceptionDemoData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/IndexOrNameData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/IndexOrNameData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/IndexOrNameData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/IndexOrNameData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/IndexOrNameDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/IndexOrNameDataListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/IndexOrNameDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/IndexOrNameDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/NoModelDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/NoModelDataListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/read/NoModelDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/NoModelDataListener.java 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 new file mode 100644 index 00000000..d621c300 --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java @@ -0,0 +1,348 @@ +package com.alibaba.easyexcel.test.demo.read; + +import java.io.File; +import java.util.List; +import java.util.Map; + +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelReader; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.format.DateTimeFormat; +import com.alibaba.excel.annotation.format.NumberFormat; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.converters.DefaultConverterLoader; +import com.alibaba.excel.enums.CellExtraTypeEnum; +import com.alibaba.excel.read.listener.PageReadListener; +import com.alibaba.excel.read.listener.ReadListener; +import com.alibaba.excel.read.metadata.ReadSheet; +import com.alibaba.excel.util.ListUtils; +import com.alibaba.fastjson.JSON; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Ignore; +import org.junit.Test; + +/** + * 读的常见写法 + * + * @author Jiaju Zhuang + */ +@Ignore +@Slf4j +public class ReadTest { + + /** + * 最简单的读 + *

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

+ * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener} + *

+ * 3. 直接读即可 + */ + @Test + public void simpleRead() { + // 写法1:JDK8+ ,不用额外写一个DemoDataListener + // since: 3.0.0-beta1 + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭 + // 这里每次会读取3000条数据 然后返回过来 直接调用使用数据就行 + EasyExcel.read(fileName, DemoData.class, new PageReadListener(dataList -> { + for (DemoData demoData : dataList) { + log.info("读取到一条数据{}", JSON.toJSONString(demoData)); + } + })).sheet().doRead(); + + // 写法2: + // 匿名内部类 不用额外写一个DemoDataListener + fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭 + EasyExcel.read(fileName, DemoData.class, new ReadListener() { + /** + * 单次缓存的数据量 + */ + public static final int BATCH_COUNT = 100; + /** + *临时存储 + */ + private List cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT); + + @Override + public void invoke(DemoData data, AnalysisContext context) { + cachedDataList.add(data); + if (cachedDataList.size() >= BATCH_COUNT) { + saveData(); + // 存储完成清理 list + cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT); + } + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + saveData(); + } + + /** + * 加上存储数据库 + */ + private void saveData() { + log.info("{}条数据,开始存储数据库!", cachedDataList.size()); + log.info("存储数据库成功!"); + } + }).sheet().doRead(); + + // 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去 + // 写法3: + fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭 + EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead(); + + // 写法4: 使用 try-with-resources @since 3.1.0 + fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 一个文件一个reader + try (ExcelReader excelReader = EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).build()) { + // 构建一个sheet 这里可以指定名字或者no + ReadSheet readSheet = EasyExcel.readSheet(0).build(); + // 读取一个sheet + excelReader.read(readSheet); + } + + // 写法5: 不使用 try-with-resources + fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 一个文件一个reader + ExcelReader excelReader = null; + try { + excelReader = EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).build(); + // 构建一个sheet 这里可以指定名字或者no + ReadSheet readSheet = EasyExcel.readSheet(0).build(); + // 读取一个sheet + excelReader.read(readSheet); + } finally { + if (excelReader != null) { + // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的 + excelReader.close(); + } + } + } + + /** + * 指定列的下标或者列名 + * + *

+ * 1. 创建excel对应的实体对象,并使用{@link ExcelProperty}注解. 参照{@link IndexOrNameData} + *

+ * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link IndexOrNameDataListener} + *

+ * 3. 直接读即可 + */ + @Test + public void indexOrNameRead() { + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 这里默认读取第一个sheet + EasyExcel.read(fileName, IndexOrNameData.class, new IndexOrNameDataListener()).sheet().doRead(); + } + + /** + * 读多个或者全部sheet,这里注意一个sheet不能读取多次,多次读取需要重新读取文件 + *

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

+ * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener} + *

+ * 3. 直接读即可 + */ + @Test + public void repeatedRead() { + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 读取全部sheet + // 这里需要注意 DemoDataListener的doAfterAllAnalysed 会在每个sheet读取完毕后调用一次。然后所有sheet都会往同一个DemoDataListener里面写 + EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).doReadAll(); + + // 读取部分sheet + fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + + // 写法1: 使用 try-with-resources @since 3.1.0 + try (ExcelReader excelReader = EasyExcel.read(fileName).build()) { + // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener + ReadSheet readSheet1 = + EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new DemoDataListener()).build(); + ReadSheet readSheet2 = + EasyExcel.readSheet(1).head(DemoData.class).registerReadListener(new DemoDataListener()).build(); + // 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能 + excelReader.read(readSheet1, readSheet2); + } + + // 写法2: 不使用 try-with-resources + ExcelReader excelReader = null; + try { + excelReader = EasyExcel.read(fileName).build(); + + // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener + ReadSheet readSheet1 = + EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new DemoDataListener()).build(); + ReadSheet readSheet2 = + EasyExcel.readSheet(1).head(DemoData.class).registerReadListener(new DemoDataListener()).build(); + // 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能 + excelReader.read(readSheet1, readSheet2); + } finally { + if (excelReader != null) { + // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的 + excelReader.close(); + } + } + } + + /** + * 日期、数字或者自定义格式转换 + *

+ * 默认读的转换器{@link DefaultConverterLoader#loadDefaultReadConverter()} + *

+ * 1. 创建excel对应的实体对象 参照{@link ConverterData}.里面可以使用注解{@link DateTimeFormat}、{@link NumberFormat}或者自定义注解 + *

+ * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link ConverterDataListener} + *

+ * 3. 直接读即可 + */ + @Test + public void converterRead() { + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 这里 需要指定读用哪个class去读,然后读取第一个sheet + EasyExcel.read(fileName, ConverterData.class, new ConverterDataListener()) + // 这里注意 我们也可以registerConverter来指定自定义转换器, 但是这个转换变成全局了, 所有java为string,excel为string的都会用这个转换器。 + // 如果就想单个字段使用请使用@ExcelProperty 指定converter + // .registerConverter(new CustomStringStringConverter()) + // 读取sheet + .sheet().doRead(); + } + + /** + * 多行头 + * + *

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

+ * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener} + *

+ * 3. 设置headRowNumber参数,然后读。 这里要注意headRowNumber如果不指定, 会根据你传入的class的{@link ExcelProperty#value()}里面的表头的数量来决定行数, + * 如果不传入class则默认为1.当然你指定了headRowNumber不管是否传入class都是以你传入的为准。 + */ + @Test + public void complexHeaderRead() { + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 这里 需要指定读用哪个class去读,然后读取第一个sheet + EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet() + // 这里可以设置1,因为头就是一行。如果多行头,可以设置其他值。不传入也可以,因为默认会根据DemoData 来解析,他没有指定头,也就是默认1行 + .headRowNumber(1).doRead(); + } + + /** + * 读取表头数据 + * + *

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

+ * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoHeadDataListener} + *

+ * 3. 直接读即可 + */ + @Test + public void headerRead() { + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 这里 需要指定读用哪个class去读,然后读取第一个sheet + EasyExcel.read(fileName, DemoData.class, new DemoHeadDataListener()).sheet().doRead(); + } + + /** + * 额外信息(批注、超链接、合并单元格信息读取) + *

+ * 由于是流式读取,没法在读取到单元格数据的时候直接读取到额外信息,所以只能最后通知哪些单元格有哪些额外信息 + * + *

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

+ * 2. 由于默认异步读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoExtraListener} + *

+ * 3. 直接读即可 + * + * @since 2.2.0-beat1 + */ + @Test + public void extraRead() { + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "extra.xlsx"; + // 这里 需要指定读用哪个class去读,然后读取第一个sheet + EasyExcel.read(fileName, DemoExtraData.class, new DemoExtraListener()) + // 需要读取批注 默认不读取 + .extraRead(CellExtraTypeEnum.COMMENT) + // 需要读取超链接 默认不读取 + .extraRead(CellExtraTypeEnum.HYPERLINK) + // 需要读取合并单元格信息 默认不读取 + .extraRead(CellExtraTypeEnum.MERGE).sheet().doRead(); + } + + /** + * 读取公式和单元格类型 + * + *

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

+ * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoHeadDataListener} + *

+ * 3. 直接读即可 + * + * @since 2.2.0-beat1 + */ + @Test + public void cellDataRead() { + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "cellDataDemo.xlsx"; + // 这里 需要指定读用哪个class去读,然后读取第一个sheet + EasyExcel.read(fileName, CellDataReadDemoData.class, new CellDataDemoHeadDataListener()).sheet().doRead(); + } + + /** + * 数据转换等异常处理 + * + *

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

+ * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoExceptionListener} + *

+ * 3. 直接读即可 + */ + @Test + public void exceptionRead() { + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 这里 需要指定读用哪个class去读,然后读取第一个sheet + EasyExcel.read(fileName, ExceptionDemoData.class, new DemoExceptionListener()).sheet().doRead(); + } + + /** + * 同步的返回,不推荐使用,如果数据量大会把数据放到内存里面 + */ + @Test + public void synchronousRead() { + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finish + List list = EasyExcel.read(fileName).head(DemoData.class).sheet().doReadSync(); + for (DemoData data : list) { + log.info("读取到数据:{}", JSON.toJSONString(data)); + } + + // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish + List> listMap = EasyExcel.read(fileName).sheet().doReadSync(); + for (Map data : listMap) { + // 返回每条数据的键值对 表示所在的列 和所在列的值 + log.info("读取到数据:{}", JSON.toJSONString(data)); + } + } + + /** + * 不创建对象的读 + */ + @Test + public void noModelRead() { + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + // 这里 只要,然后读取第一个sheet 同步读取会自动finish + EasyExcel.read(fileName, new NoModelDataListener()).sheet().doRead(); + } +} diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/web/DownloadData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/DownloadData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/web/DownloadData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/DownloadData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/web/EasyexcelApplication.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/EasyexcelApplication.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/web/EasyexcelApplication.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/EasyexcelApplication.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDAO.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDAO.java similarity index 90% rename from src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDAO.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDAO.java index eac96625..8c18484f 100644 --- a/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDAO.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDAO.java @@ -4,8 +4,6 @@ import java.util.List; import org.springframework.stereotype.Repository; -import com.alibaba.easyexcel.test.demo.read.DemoData; - /** * 假设这个是你的DAO存储。当然还要这个类让spring管理,当然你不用需要存储,也不需要这个类。 * diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/web/UploadData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/UploadDataListener.java diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java new file mode 100644 index 00000000..0260534f --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java @@ -0,0 +1,111 @@ +package com.alibaba.easyexcel.test.demo.web; + +import java.io.IOException; +import java.net.URLEncoder; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.util.ListUtils; +import com.alibaba.excel.util.MapUtils; +import com.alibaba.fastjson.JSON; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +/** + * web读写案例 + * + * @author Jiaju Zhuang + **/ +@Controller +public class WebTest { + + @Autowired + private UploadDAO uploadDAO; + + /** + * 文件下载(失败了会返回一个有部分数据的Excel) + *

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

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

+ * 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大 + */ + @GetMapping("download") + public void download(HttpServletResponse response) throws IOException { + // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 + String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + + EasyExcel.write(response.getOutputStream(), DownloadData.class).sheet("模板").doWrite(data()); + } + + /** + * 文件下载并且失败的时候返回json(默认失败了会返回一个有部分数据的Excel) + * + * @since 2.1.1 + */ + @GetMapping("downloadFailedUsingJson") + public void downloadFailedUsingJson(HttpServletResponse response) throws IOException { + // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman + try { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 + String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream(), DownloadData.class).autoCloseStream(Boolean.FALSE).sheet("模板") + .doWrite(data()); + } catch (Exception e) { + // 重置response + response.reset(); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + Map map = MapUtils.newHashMap(); + map.put("status", "failure"); + map.put("message", "下载文件失败" + e.getMessage()); + response.getWriter().println(JSON.toJSONString(map)); + } + } + + /** + * 文件上传 + *

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

+ * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link UploadDataListener} + *

+ * 3. 直接读即可 + */ + @PostMapping("upload") + @ResponseBody + public String upload(MultipartFile file) throws IOException { + EasyExcel.read(file.getInputStream(), UploadData.class, new UploadDataListener(uploadDAO)).sheet().doRead(); + return "success"; + } + + private List data() { + List list = ListUtils.newArrayList(); + for (int i = 0; i < 10; i++) { + DownloadData data = new DownloadData(); + data.setString("字符串" + 0); + data.setDate(new Date()); + data.setDoubleData(0.56); + list.add(data); + } + return list; + } +} diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/CommentWriteHandler.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/CommentWriteHandler.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/CommentWriteHandler.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/CommentWriteHandler.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/ComplexHeadData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/ComplexHeadData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/ComplexHeadData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/ComplexHeadData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/ConverterData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/ConverterData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/ConverterData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/ConverterData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/CustomCellWriteHandler.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/CustomCellWriteHandler.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/CustomCellWriteHandler.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/CustomCellWriteHandler.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/CustomSheetWriteHandler.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/CustomSheetWriteHandler.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/CustomSheetWriteHandler.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/CustomSheetWriteHandler.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/CustomStringStringConverter.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/CustomStringStringConverter.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/CustomStringStringConverter.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/CustomStringStringConverter.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/DemoData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DemoData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/DemoData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DemoData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/DemoMergeData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DemoMergeData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/DemoMergeData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DemoMergeData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/DemoStyleData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DemoStyleData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/DemoStyleData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/DemoStyleData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/ImageDataWithAnnotation.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/ImageDataWithAnnotation.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/ImageDemoData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/ImageDemoData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/ImageDemoData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/ImageDemoData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/IndexData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/IndexData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/IndexData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/IndexData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/LongestMatchColumnWidthData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/LongestMatchColumnWidthData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/LongestMatchColumnWidthData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/LongestMatchColumnWidthData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/WidthAndHeightData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WidthAndHeightData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/WidthAndHeightData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WidthAndHeightData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteCellDemoData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteCellDemoData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/demo/write/WriteCellDemoData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteCellDemoData.java 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 new file mode 100644 index 00000000..f7d015ca --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java @@ -0,0 +1,861 @@ +package com.alibaba.easyexcel.test.demo.write; + +import java.io.File; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.format.DateTimeFormat; +import com.alibaba.excel.annotation.format.NumberFormat; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.data.CommentData; +import com.alibaba.excel.metadata.data.FormulaData; +import com.alibaba.excel.metadata.data.HyperlinkData; +import com.alibaba.excel.metadata.data.HyperlinkData.HyperlinkType; +import com.alibaba.excel.metadata.data.ImageData; +import com.alibaba.excel.metadata.data.ImageData.ImageType; +import com.alibaba.excel.metadata.data.RichTextStringData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.util.BooleanUtils; +import com.alibaba.excel.util.FileUtils; +import com.alibaba.excel.util.ListUtils; +import com.alibaba.excel.write.handler.CellWriteHandler; +import com.alibaba.excel.write.handler.context.CellWriteHandlerContext; +import com.alibaba.excel.write.merge.LoopMergeStrategy; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.WriteTable; +import com.alibaba.excel.write.metadata.style.WriteCellStyle; +import com.alibaba.excel.write.metadata.style.WriteFont; +import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; + +import org.apache.poi.ss.usermodel.Cell; +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.apache.poi.xssf.streaming.SXSSFSheet; +import org.junit.Ignore; +import org.junit.Test; + +/** + * 写的常见写法 + * + * @author Jiaju Zhuang + */ +@Ignore +public class WriteTest { + + /** + * 最简单的写 + *

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

+ * 2. 直接写即可 + */ + @Test + public void simpleWrite() { + // 注意 simpleWrite在数据量不大的情况下可以使用(5000以内,具体也要看实际情况),数据量大参照 重复多次写入 + + // 写法1 JDK8+ + // since: 3.0.0-beta1 + String fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + // 如果这里想使用03 则 传入excelType参数即可 + EasyExcel.write(fileName, DemoData.class) + .sheet("模板") + .doWrite(() -> { + // 分页查询数据 + return data(); + }); + + // 写法2 + fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + // 如果这里想使用03 则 传入excelType参数即可 + EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data()); + + // 写法3:使用 try-with-resources @since 3.1.0 + fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写 + try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet("模板").build(); + excelWriter.write(data(), writeSheet); + } + + // 写法4: 不使用 try-with-resources + fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写 + ExcelWriter excelWriter = null; + try { + excelWriter = EasyExcel.write(fileName, DemoData.class).build(); + WriteSheet writeSheet = EasyExcel.writerSheet("模板").build(); + excelWriter.write(data(), writeSheet); + } finally { + // 千万别忘记close 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.close(); + } + } + } + + /** + * 根据参数只导出指定列 + *

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

+ * 2. 根据自己或者排除自己需要的列 + *

+ * 3. 直接写即可 + * + * @since 2.1.1 + */ + @Test + public void excludeOrIncludeWrite() { + String fileName = TestFileUtil.getPath() + "excludeOrIncludeWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里需要注意 在使用ExcelProperty注解的使用,如果想不空列则需要加入order字段,而不是index,order会忽略空列,然后继续往后,而index,不会忽略空列,在第几列就是第几列。 + + // 根据用户传入字段 假设我们要忽略 date + Set excludeColumnFieldNames = new HashSet<>(); + excludeColumnFieldNames.add("date"); + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, DemoData.class).excludeColumnFieldNames(excludeColumnFieldNames).sheet("模板") + .doWrite(data()); + + fileName = TestFileUtil.getPath() + "excludeOrIncludeWrite" + System.currentTimeMillis() + ".xlsx"; + // 根据用户传入字段 假设我们只要导出 date + Set includeColumnFieldNames = new HashSet<>(); + includeColumnFieldNames.add("date"); + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, DemoData.class).includeColumnFieldNames(includeColumnFieldNames).sheet("模板") + .doWrite(data()); + } + + /** + * 指定写入的列 + *

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

+ * 2. 使用{@link ExcelProperty}注解指定写入的列 + *

+ * 3. 直接写即可 + */ + @Test + public void indexWrite() { + String fileName = TestFileUtil.getPath() + "indexWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, IndexData.class).sheet("模板").doWrite(data()); + } + + /** + * 复杂头写入 + *

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

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

+ * 3. 直接写即可 + */ + @Test + public void complexHeadWrite() { + String fileName = TestFileUtil.getPath() + "complexHeadWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, ComplexHeadData.class).sheet("模板").doWrite(data()); + } + + /** + * 重复多次写入 + *

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

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

+ * 3. 直接调用二次写入即可 + */ + @Test + public void repeatedWrite() { + // 方法1.1: 如果写到同一个sheet 使用 try-with-resources @since 3.1.0 + String fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写 + try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) { + // 这里注意 如果同一个sheet只要创建一次 + WriteSheet writeSheet = EasyExcel.writerSheet("模板").build(); + // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来 + for (int i = 0; i < 5; i++) { + // 分页去数据库查询数据 这里可以去数据库查询每一页的数据 + List data = data(); + excelWriter.write(data, writeSheet); + } + } + + // 方法1.2: 如果写到同一个sheet 不使用 try-with-resources + fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; + ExcelWriter writer = null; + try { + // 这里 需要指定写用哪个class去写 + writer = EasyExcel.write(fileName, DemoData.class).build(); + // 这里注意 如果同一个sheet只要创建一次 + WriteSheet writeSheet = EasyExcel.writerSheet("模板").build(); + // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来 + for (int i = 0; i < 5; i++) { + // 分页去数据库查询数据 这里可以去数据库查询每一页的数据 + List data = data(); + writer.write(data, writeSheet); + } + } finally { + // 千万别忘记close 会帮忙关闭流 + if (writer != null) { + writer.close(); + } + } + + // 方法2.1: 如果写到不同的sheet 同一个对象 使用 try-with-resources @since 3.1.0 + fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 指定文件 + try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) { + // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面 + for (int i = 0; i < 5; i++) { + // 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样 + WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).build(); + // 分页去数据库查询数据 这里可以去数据库查询每一页的数据 + List data = data(); + excelWriter.write(data, writeSheet); + } + } + + // 方法2.2: 如果写到不同的sheet 同一个对象 不使用 try-with-resources + fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; + try { + // 这里 指定文件 + writer = EasyExcel.write(fileName, DemoData.class).build(); + // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面 + for (int i = 0; i < 5; i++) { + // 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样 + WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).build(); + // 分页去数据库查询数据 这里可以去数据库查询每一页的数据 + List data = data(); + writer.write(data, writeSheet); + } + } finally { + // 千万别忘记close 会帮忙关闭流 + if (writer != null) { + writer.close(); + } + } + + // 方法3.1 如果写到不同的sheet 不同的对象 使用 try-with-resources @since 3.1.0 + fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 指定文件 + try (ExcelWriter excelWriter = EasyExcel.write(fileName).build()) { + // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面 + for (int i = 0; i < 5; i++) { + // 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样。这里注意DemoData.class 可以每次都变,我这里为了方便 所以用的同一个class + // 实际上可以一直变 + WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).head(DemoData.class).build(); + // 分页去数据库查询数据 这里可以去数据库查询每一页的数据 + List data = data(); + excelWriter.write(data, writeSheet); + } + } + + // 方法3.2 如果写到不同的sheet 不同的对象 不使用 try-with-resources + fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; + try { + // 这里 指定文件 + writer = EasyExcel.write(fileName).build(); + // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面 + for (int i = 0; i < 5; i++) { + // 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样。这里注意DemoData.class 可以每次都变,我这里为了方便 所以用的同一个class + // 实际上可以一直变 + WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).head(DemoData.class).build(); + // 分页去数据库查询数据 这里可以去数据库查询每一页的数据 + List data = data(); + writer.write(data, writeSheet); + } + } finally { + // 千万别忘记close 会帮忙关闭流 + if (writer != null) { + writer.close(); + } + } + } + + /** + * 日期、数字或者自定义格式转换 + *

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

+ * 2. 使用{@link ExcelProperty}配合使用注解{@link DateTimeFormat}、{@link NumberFormat}或者自定义注解 + *

+ * 3. 直接写即可 + */ + @Test + public void converterWrite() { + String fileName = TestFileUtil.getPath() + "converterWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, ConverterData.class).sheet("模板").doWrite(data()); + } + + /** + * 图片导出 + *

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

+ * 2. 直接写即可 + */ + @Test + public void imageWrite() throws Exception { + String fileName = TestFileUtil.getPath() + "imageWrite" + System.currentTimeMillis() + ".xlsx"; + + String imagePath = TestFileUtil.getPath() + "converter" + File.separator + "img.jpg"; + try (InputStream inputStream = FileUtils.openInputStream(new File(imagePath))) { + List list = ListUtils.newArrayList(); + ImageDemoData imageDemoData = new ImageDemoData(); + list.add(imageDemoData); + // 放入五种类型的图片 实际使用只要选一种即可 + imageDemoData.setByteArray(FileUtils.readFileToByteArray(new File(imagePath))); + imageDemoData.setFile(new File(imagePath)); + imageDemoData.setString(imagePath); + imageDemoData.setInputStream(inputStream); + imageDemoData.setUrl(new URL( + "https://raw.githubusercontent.com/alibaba/easyexcel/master/src/test/resources/converter/img.jpg")); + + // 这里演示 + // 需要额外放入文字 + // 而且需要放入2个图片 + // 第一个图片靠左 + // 第二个靠右 而且要额外的占用他后面的单元格 + WriteCellData writeCellData = new WriteCellData<>(); + imageDemoData.setWriteCellDataFile(writeCellData); + // 这里可以设置为 EMPTY 则代表不需要其他数据了 + writeCellData.setType(CellDataTypeEnum.STRING); + writeCellData.setStringValue("额外的放一些文字"); + + // 可以放入多个图片 + List imageDataList = new ArrayList<>(); + ImageData imageData = new ImageData(); + imageDataList.add(imageData); + writeCellData.setImageDataList(imageDataList); + // 放入2进制图片 + imageData.setImage(FileUtils.readFileToByteArray(new File(imagePath))); + // 图片类型 + imageData.setImageType(ImageType.PICTURE_TYPE_PNG); + // 上 右 下 左 需要留空 + // 这个类似于 css 的 margin + // 这里实测 不能设置太大 超过单元格原始大小后 打开会提示修复。暂时未找到很好的解法。 + imageData.setTop(5); + imageData.setRight(40); + imageData.setBottom(5); + imageData.setLeft(5); + + // 放入第二个图片 + imageData = new ImageData(); + imageDataList.add(imageData); + writeCellData.setImageDataList(imageDataList); + imageData.setImage(FileUtils.readFileToByteArray(new File(imagePath))); + imageData.setImageType(ImageType.PICTURE_TYPE_PNG); + imageData.setTop(5); + imageData.setRight(5); + imageData.setBottom(5); + imageData.setLeft(50); + // 设置图片的位置 假设 现在目标 是 覆盖 当前单元格 和当前单元格右边的单元格 + // 起点相对于当前单元格为0 当然可以不写 + imageData.setRelativeFirstRowIndex(0); + imageData.setRelativeFirstColumnIndex(0); + imageData.setRelativeLastRowIndex(0); + // 前面3个可以不写 下面这个需要写 也就是 结尾 需要相对当前单元格 往右移动一格 + // 也就是说 这个图片会覆盖当前单元格和 后面的那一格 + imageData.setRelativeLastColumnIndex(1); + + // 写入数据 + EasyExcel.write(fileName, ImageDemoData.class).sheet().doWrite(list); + } + } + + /** + * 超链接、备注、公式、指定单个单元格的样式、单个单元格多种样式 + *

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

+ * 2. 直接写即可 + * + * @since 3.0.0-beta1 + */ + @Test + public void writeCellDataWrite() { + String fileName = TestFileUtil.getPath() + "writeCellDataWrite" + System.currentTimeMillis() + ".xlsx"; + WriteCellDemoData writeCellDemoData = new WriteCellDemoData(); + + // 设置超链接 + WriteCellData hyperlink = new WriteCellData<>("官方网站"); + writeCellDemoData.setHyperlink(hyperlink); + HyperlinkData hyperlinkData = new HyperlinkData(); + hyperlink.setHyperlinkData(hyperlinkData); + hyperlinkData.setAddress("https://github.com/alibaba/easyexcel"); + hyperlinkData.setHyperlinkType(HyperlinkType.URL); + + // 设置备注 + WriteCellData comment = new WriteCellData<>("备注的单元格信息"); + writeCellDemoData.setCommentData(comment); + CommentData commentData = new CommentData(); + comment.setCommentData(commentData); + commentData.setAuthor("Jiaju Zhuang"); + commentData.setRichTextStringData(new RichTextStringData("这是一个备注")); + // 备注的默认大小是按照单元格的大小 这里想调整到4个单元格那么大 所以向后 向下 各额外占用了一个单元格 + commentData.setRelativeLastColumnIndex(1); + commentData.setRelativeLastRowIndex(1); + + // 设置公式 + WriteCellData formula = new WriteCellData<>(); + writeCellDemoData.setFormulaData(formula); + FormulaData formulaData = new FormulaData(); + formula.setFormulaData(formulaData); + // 将 123456789 中的第一个数字替换成 2 + // 这里只是例子 如果真的涉及到公式 能内存算好尽量内存算好 公式能不用尽量不用 + formulaData.setFormulaValue("REPLACE(123456789,1,1,2)"); + + // 设置单个单元格的样式 当然样式 很多的话 也可以用注解等方式。 + WriteCellData writeCellStyle = new WriteCellData<>("单元格样式"); + writeCellStyle.setType(CellDataTypeEnum.STRING); + writeCellDemoData.setWriteCellStyle(writeCellStyle); + WriteCellStyle writeCellStyleData = new WriteCellStyle(); + writeCellStyle.setWriteCellStyle(writeCellStyleData); + // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色. + writeCellStyleData.setFillPatternType(FillPatternType.SOLID_FOREGROUND); + // 背景绿色 + writeCellStyleData.setFillForegroundColor(IndexedColors.GREEN.getIndex()); + + // 设置单个单元格多种样式 + WriteCellData richTest = new WriteCellData<>(); + richTest.setType(CellDataTypeEnum.RICH_TEXT_STRING); + writeCellDemoData.setRichText(richTest); + RichTextStringData richTextStringData = new RichTextStringData(); + richTest.setRichTextStringDataValue(richTextStringData); + richTextStringData.setTextString("红色绿色默认"); + // 前2个字红色 + WriteFont writeFont = new WriteFont(); + writeFont.setColor(IndexedColors.RED.getIndex()); + richTextStringData.applyFont(0, 2, writeFont); + // 接下来2个字绿色 + writeFont = new WriteFont(); + writeFont.setColor(IndexedColors.GREEN.getIndex()); + richTextStringData.applyFont(2, 4, writeFont); + + List data = new ArrayList<>(); + data.add(writeCellDemoData); + EasyExcel.write(fileName, WriteCellDemoData.class).inMemory(true).sheet("模板").doWrite(data); + } + + /** + * 根据模板写入 + *

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

+ * 2. 使用{@link ExcelProperty}注解指定写入的列 + *

+ * 3. 使用withTemplate 写取模板 + *

+ * 4. 直接写即可 + */ + @Test + public void templateWrite() { + String templateFileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + String fileName = TestFileUtil.getPath() + "templateWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, DemoData.class).withTemplate(templateFileName).sheet().doWrite(data()); + } + + /** + * 列宽、行高 + *

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

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

+ * 3. 直接写即可 + */ + @Test + public void widthAndHeightWrite() { + String fileName = TestFileUtil.getPath() + "widthAndHeightWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, WidthAndHeightData.class).sheet("模板").doWrite(data()); + } + + /** + * 注解形式自定义样式 + *

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

+ * 3. 直接写即可 + * + * @since 2.2.0-beta1 + */ + @Test + public void annotationStyleWrite() { + String fileName = TestFileUtil.getPath() + "annotationStyleWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, DemoStyleData.class).sheet("模板").doWrite(data()); + } + + /** + * 拦截器形式自定义样式 + *

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

+ * 2. 创建一个style策略 并注册 + *

+ * 3. 直接写即可 + */ + @Test + public void handlerStyleWrite() { + // 方法1 使用已有的策略 推荐 + // HorizontalCellStyleStrategy 每一行的样式都一样 或者隔行一样 + // AbstractVerticalCellStyleStrategy 每一列的样式都一样 需要自己回调每一页 + String fileName = TestFileUtil.getPath() + "handlerStyleWrite" + System.currentTimeMillis() + ".xlsx"; + // 头的策略 + WriteCellStyle headWriteCellStyle = new WriteCellStyle(); + // 背景设置为红色 + headWriteCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); + WriteFont headWriteFont = new WriteFont(); + headWriteFont.setFontHeightInPoints((short)20); + headWriteCellStyle.setWriteFont(headWriteFont); + // 内容的策略 + WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); + // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定 + contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); + // 背景绿色 + contentWriteCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex()); + WriteFont contentWriteFont = new WriteFont(); + // 字体大小 + contentWriteFont.setFontHeightInPoints((short)20); + contentWriteCellStyle.setWriteFont(contentWriteFont); + // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现 + HorizontalCellStyleStrategy horizontalCellStyleStrategy = + new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); + + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, DemoData.class) + .registerWriteHandler(horizontalCellStyleStrategy) + .sheet("模板") + .doWrite(data()); + + // 方法2: 使用easyexcel的方式完全自己写 不太推荐 尽量使用已有策略 + // @since 3.0.0-beta2 + fileName = TestFileUtil.getPath() + "handlerStyleWrite" + System.currentTimeMillis() + ".xlsx"; + EasyExcel.write(fileName, DemoData.class) + .registerWriteHandler(new CellWriteHandler() { + @Override + public void afterCellDispose(CellWriteHandlerContext context) { + // 当前事件会在 数据设置到poi的cell里面才会回调 + // 判断不是头的情况 如果是fill 的情况 这里会==null 所以用not true + if (BooleanUtils.isNotTrue(context.getHead())) { + // 第一个单元格 + // 只要不是头 一定会有数据 当然fill的情况 可能要context.getCellDataList() ,这个需要看模板,因为一个单元格会有多个 WriteCellData + WriteCellData cellData = context.getFirstCellData(); + // 这里需要去cellData 获取样式 + // 很重要的一个原因是 WriteCellStyle 和 dataFormatData绑定的 简单的说 比如你加了 DateTimeFormat + // ,已经将writeCellStyle里面的dataFormatData 改了 如果你自己new了一个WriteCellStyle,可能注解的样式就失效了 + // 然后 getOrCreateStyle 用于返回一个样式,如果为空,则创建一个后返回 + WriteCellStyle writeCellStyle = cellData.getOrCreateStyle(); + writeCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); + // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND + writeCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); + + // 这样样式就设置好了 后面有个FillStyleCellWriteHandler 默认会将 WriteCellStyle 设置到 cell里面去 所以可以不用管了 + } + } + }).sheet("模板") + .doWrite(data()); + + // 方法3: 使用poi的样式完全自己写 不推荐 + // @since 3.0.0-beta2 + // 坑1:style里面有dataformat 用来格式化数据的 所以自己设置可能导致格式化注解不生效 + // 坑2:不要一直去创建style 记得缓存起来 最多创建6W个就挂了 + fileName = TestFileUtil.getPath() + "handlerStyleWrite" + System.currentTimeMillis() + ".xlsx"; + EasyExcel.write(fileName, DemoData.class) + .registerWriteHandler(new CellWriteHandler() { + @Override + public void afterCellDispose(CellWriteHandlerContext context) { + // 当前事件会在 数据设置到poi的cell里面才会回调 + // 判断不是头的情况 如果是fill 的情况 这里会==null 所以用not true + if (BooleanUtils.isNotTrue(context.getHead())) { + Cell cell = context.getCell(); + // 拿到poi的workbook + Workbook workbook = context.getWriteWorkbookHolder().getWorkbook(); + // 这里千万记住 想办法能复用的地方把他缓存起来 一个表格最多创建6W个样式 + // 不同单元格尽量传同一个 cellStyle + CellStyle cellStyle = workbook.createCellStyle(); + cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); + // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND + cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + cell.setCellStyle(cellStyle); + + // 由于这里没有指定dataformat 最后展示的数据 格式可能会不太正确 + + // 这里要把 WriteCellData的样式清空, 不然后面还有一个拦截器 FillStyleCellWriteHandler 默认会将 WriteCellStyle 设置到 + // cell里面去 会导致自己设置的不一样 + context.getFirstCellData().setWriteCellStyle(null); + } + } + }).sheet("模板") + .doWrite(data()); + } + + /** + * 合并单元格 + *

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

+ * 2. 创建一个merge策略 并注册 + *

+ * 3. 直接写即可 + * + * @since 2.2.0-beta1 + */ + @Test + public void mergeWrite() { + // 方法1 注解 + String fileName = TestFileUtil.getPath() + "mergeWrite" + System.currentTimeMillis() + ".xlsx"; + // 在DemoStyleData里面加上ContentLoopMerge注解 + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, DemoMergeData.class).sheet("模板").doWrite(data()); + + // 方法2 自定义合并单元格策略 + fileName = TestFileUtil.getPath() + "mergeWrite" + System.currentTimeMillis() + ".xlsx"; + // 每隔2行会合并 把eachColumn 设置成 3 也就是我们数据的长度,所以就第一列会合并。当然其他合并策略也可以自己写 + LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(2, 0); + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, DemoData.class).registerWriteHandler(loopMergeStrategy).sheet("模板").doWrite(data()); + } + + /** + * 使用table去写入 + *

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

+ * 2. 然后写入table即可 + */ + @Test + public void tableWrite() { + String fileName = TestFileUtil.getPath() + "tableWrite" + System.currentTimeMillis() + ".xlsx"; + // 方法1 这里直接写多个table的案例了,如果只有一个 也可以直一行代码搞定,参照其他案, 使用 try-with-resources @since 3.1.0 + // 这里 需要指定写用哪个class去写 + try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) { + // 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了 + WriteSheet writeSheet = EasyExcel.writerSheet("模板").needHead(Boolean.FALSE).build(); + // 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要 + WriteTable writeTable0 = EasyExcel.writerTable(0).needHead(Boolean.TRUE).build(); + WriteTable writeTable1 = EasyExcel.writerTable(1).needHead(Boolean.TRUE).build(); + // 第一次写入会创建头 + excelWriter.write(data(), writeSheet, writeTable0); + // 第二次写如也会创建头,然后在第一次的后面写入数据 + excelWriter.write(data(), writeSheet, writeTable1); + } + + // 方法2 这里直接写多个table的案例了,如果只有一个 也可以直一行代码搞定,参照其他案, 不使用 try-with-resources + // 这里 需要指定写用哪个class去写 + ExcelWriter excelWriter = null; + try { + excelWriter = EasyExcel.write(fileName, DemoData.class).build(); + // 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了 + WriteSheet writeSheet = EasyExcel.writerSheet("模板").needHead(Boolean.FALSE).build(); + // 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要 + WriteTable writeTable0 = EasyExcel.writerTable(0).needHead(Boolean.TRUE).build(); + WriteTable writeTable1 = EasyExcel.writerTable(1).needHead(Boolean.TRUE).build(); + // 第一次写入会创建头 + excelWriter.write(data(), writeSheet, writeTable0); + // 第二次写如也会创建头,然后在第一次的后面写入数据 + excelWriter.write(data(), writeSheet, writeTable1); + } finally { + // 千万别忘记close 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.close(); + } + } + } + + /** + * 动态头,实时生成头写入 + *

+ * 思路是这样子的,先创建List头格式的sheet仅仅写入头,然后通过table 不写入头的方式 去写入数据 + * + *

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

+ * 2. 然后写入table即可 + */ + @Test + public void dynamicHeadWrite() { + String fileName = TestFileUtil.getPath() + "dynamicHeadWrite" + System.currentTimeMillis() + ".xlsx"; + EasyExcel.write(fileName) + // 这里放入动态头 + .head(head()).sheet("模板") + // 当然这里数据也可以用 List> 去传入 + .doWrite(data()); + } + + /** + * 自动列宽(不太精确) + *

+ * 这个目前不是很好用,比如有数字就会导致换行。而且长度也不是刚好和实际长度一致。 所以需要精确到刚好列宽的慎用。 当然也可以自己参照 {@link LongestMatchColumnWidthStyleStrategy} + * 重新实现. + *

+ * poi 自带{@link SXSSFSheet#autoSizeColumn(int)} 对中文支持也不太好。目前没找到很好的算法。 有的话可以推荐下。 + * + *

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

+ * 2. 注册策略{@link LongestMatchColumnWidthStyleStrategy} + *

+ * 3. 直接写即可 + */ + @Test + public void longestMatchColumnWidthWrite() { + String fileName = + TestFileUtil.getPath() + "longestMatchColumnWidthWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, LongestMatchColumnWidthData.class) + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("模板").doWrite(dataLong()); + } + + /** + * 下拉,超链接等自定义拦截器(上面几点都不符合但是要对单元格进行操作的参照这个) + *

+ * demo这里实现2点。1. 对第一行第一列的头超链接到:https://github.com/alibaba/easyexcel 2. 对第一列第一行和第二行的数据新增下拉框,显示 测试1 测试2 + *

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

+ * 2. 注册拦截器 {@link CustomCellWriteHandler} {@link CustomSheetWriteHandler} + *

+ * 2. 直接写即可 + */ + @Test + public void customHandlerWrite() { + String fileName = TestFileUtil.getPath() + "customHandlerWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, DemoData.class).registerWriteHandler(new CustomSheetWriteHandler()) + .registerWriteHandler(new CustomCellWriteHandler()).sheet("模板").doWrite(data()); + } + + /** + * 插入批注 + *

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

+ * 2. 注册拦截器 {@link CommentWriteHandler} + *

+ * 2. 直接写即可 + */ + @Test + public void commentWrite() { + String fileName = TestFileUtil.getPath() + "commentWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + // 这里要注意inMemory 要设置为true,才能支持批注。目前没有好的办法解决 不在内存处理批注。这个需要自己选择。 + EasyExcel.write(fileName, DemoData.class).inMemory(Boolean.TRUE).registerWriteHandler(new CommentWriteHandler()) + .sheet("模板").doWrite(data()); + } + + /** + * 可变标题处理(包括标题国际化等) + *

+ * 简单的说用List>的标题 但是还支持注解 + *

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

+ * 2. 直接写即可 + */ + @Test + public void variableTitleWrite() { + // 写法1 + String fileName = TestFileUtil.getPath() + "variableTitleWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName, ConverterData.class).head(variableTitleHead()).sheet("模板").doWrite(data()); + } + + /** + * 不创建对象的写 + */ + @Test + public void noModelWrite() { + // 写法1 + String fileName = TestFileUtil.getPath() + "noModelWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList()); + } + + private List dataLong() { + List list = ListUtils.newArrayList(); + for (int i = 0; i < 10; i++) { + LongestMatchColumnWidthData data = new LongestMatchColumnWidthData(); + data.setString("测试很长的字符串测试很长的字符串测试很长的字符串" + i); + data.setDate(new Date()); + data.setDoubleData(1000000000000.0); + list.add(data); + } + return list; + } + + private List> variableTitleHead() { + List> list = ListUtils.newArrayList(); + List head0 = ListUtils.newArrayList(); + head0.add("string" + System.currentTimeMillis()); + List head1 = ListUtils.newArrayList(); + head1.add("number" + System.currentTimeMillis()); + List head2 = ListUtils.newArrayList(); + head2.add("date" + System.currentTimeMillis()); + list.add(head0); + list.add(head1); + list.add(head2); + return list; + } + + private List> head() { + List> list = ListUtils.newArrayList(); + List head0 = ListUtils.newArrayList(); + head0.add("字符串" + System.currentTimeMillis()); + List head1 = ListUtils.newArrayList(); + head1.add("数字" + System.currentTimeMillis()); + List head2 = ListUtils.newArrayList(); + head2.add("日期" + System.currentTimeMillis()); + list.add(head0); + list.add(head1); + list.add(head2); + return list; + } + + private List> dataList() { + List> list = ListUtils.newArrayList(); + for (int i = 0; i < 10; i++) { + List data = ListUtils.newArrayList(); + data.add("字符串" + i); + data.add(new Date()); + data.add(0.56); + list.add(data); + } + return list; + } + + private List data() { + List list = ListUtils.newArrayList(); + for (int i = 0; i < 10; i++) { + DemoData data = new DemoData(); + data.setString("字符串" + i); + data.setDate(new Date()); + data.setDoubleData(0.56); + list.add(data); + } + return list; + } + +} diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/CamlData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/CamlData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/CamlData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/CamlData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/FillTempTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/FillTempTest.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/FillTempTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/FillTempTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java similarity index 97% rename from src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java index 8c9badfe..63141ba4 100644 --- a/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java @@ -37,7 +37,7 @@ public class Lock2Test { // File file = TestFileUtil.readUserHomeFile("test/test6.xls"); File file = new File("/Users/zhuangjiaju/IdeaProjects/easyexcel/src/test/resources/converter/converter07.xlsx"); - List list = EasyExcel.read("/Users/zhuangjiaju/test/test3.xlsx").sheet(0).headRowNumber(0).doReadSync(); + List list = EasyExcel.read("/Users/zhuangjiaju/Downloads/测试格式.xlsx").sheet(0).headRowNumber(0).doReadSync(); LOGGER.info("数据:{}", list.size()); for (Object data : list) { LOGGER.info("返回数据:{}", CollectionUtils.size(data)); diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/LockData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/LockData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/LockDataListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockDataListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/LockDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockDataListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java similarity index 93% rename from src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java index 031e5114..07cb7989 100644 --- a/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java @@ -24,7 +24,7 @@ public class LockTest { @Test public void test() throws Exception { List list = - EasyExcel.read(new FileInputStream("/Users/zhuangjiaju/test/pic.xls")).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/src/test/java/com/alibaba/easyexcel/test/temp/StyleData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/StyleData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java similarity index 96% rename from src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java index ece50bd6..c3a6654a 100644 --- a/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java @@ -164,18 +164,18 @@ public class StyleTest { public void testFormatter2() throws Exception { StyleData styleData = new StyleData(); Field field = styleData.getClass().getDeclaredField("byteValue"); - LOGGER.info("filed:{}", field.getType().getName()); + LOGGER.info("field:{}", field.getType().getName()); field = styleData.getClass().getDeclaredField("byteValue2"); - LOGGER.info("filed:{}", field.getType().getName()); + LOGGER.info("field:{}", field.getType().getName()); field = styleData.getClass().getDeclaredField("byteValue4"); - LOGGER.info("filed:{}", field.getType()); + LOGGER.info("field:{}", field.getType()); field = styleData.getClass().getDeclaredField("byteValue3"); - LOGGER.info("filed:{}", field.getType()); + LOGGER.info("field:{}", field.getType()); } @Test public void testFormatter3() throws Exception { - LOGGER.info("filed:{}", Byte.class == Byte.class); + LOGGER.info("field:{}", Byte.class == Byte.class); } private void isDate(Cell cell) { diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/TempFillData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/TempFillData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/TempFillData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/TempFillData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/WriteLargeTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteLargeTest.java similarity index 99% rename from src/test/java/com/alibaba/easyexcel/test/temp/WriteLargeTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteLargeTest.java index 23f623b6..aa772c20 100644 --- a/src/test/java/com/alibaba/easyexcel/test/temp/WriteLargeTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteLargeTest.java @@ -28,7 +28,6 @@ import org.slf4j.LoggerFactory; public class WriteLargeTest { private static final Logger LOGGER = LoggerFactory.getLogger(WriteLargeTest.class); - private int i = 0; @Test public void test() throws Exception { diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/WriteV34Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV34Test.java similarity index 97% rename from src/test/java/com/alibaba/easyexcel/test/temp/WriteV34Test.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV34Test.java index cf815292..f9215d7b 100644 --- a/src/test/java/com/alibaba/easyexcel/test/temp/WriteV34Test.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV34Test.java @@ -13,8 +13,6 @@ import org.slf4j.LoggerFactory; import com.alibaba.easyexcel.test.demo.write.DemoData; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.ExcelWriter; -import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.metadata.style.WriteFont; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java similarity index 92% rename from src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java index 906c092e..ffb590ee 100644 --- a/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java @@ -6,12 +6,12 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.util.BeanMapUtils; import com.alibaba.fastjson.JSON; -import net.sf.cglib.beans.BeanMap; -import net.sf.cglib.core.DebuggingClassWriter; import org.junit.Ignore; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.cglib.beans.BeanMap; +import org.springframework.cglib.core.DebuggingClassWriter; /** * 临时测试 diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/bug/DataType.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/DataType.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/bug/DataType.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/DataType.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/bug/ExcelCreat.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/ExcelCreat.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/bug/HeadType.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/bug/HeadType.java diff --git a/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 similarity index 84% rename from src/test/java/com/alibaba/easyexcel/test/temp/cache/CacheTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/cache/CacheTest.java index 4ba065a3..adcef54a 100644 --- a/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 @@ -1,17 +1,9 @@ package com.alibaba.easyexcel.test.temp.cache; import java.io.File; -import java.io.IOException; import java.util.HashMap; -import java.util.Map; import java.util.UUID; -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.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.ehcache.Cache; import org.ehcache.PersistentCacheManager; import org.ehcache.config.builders.CacheConfigurationBuilder; diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvDataListeer.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvDataListeer.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvDataListeer.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvDataListeer.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvReadTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/csv/CsvReadTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/data/DataType.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/data/DataType.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/data/DataType.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/data/DataType.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/data/HeadType.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/data/HeadType.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatTest.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatter1.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatter1.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/fill/FillData2.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/fill/FillData2.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/fill/FillData2.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/fill/FillData2.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/fill/FillTempTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/fill/FillTempTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/issue1662/Data1662.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1662/Data1662.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/issue1662/Data1662.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1662/Data1662.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/issue1662/Issue1662Test.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1662/Issue1662Test.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/issue1663/FillData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1663/FillData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/issue1663/FillData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1663/FillData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/issue1663/FillTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue1663/FillTest.java diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2443/Issue2443.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2443/Issue2443.java new file mode 100644 index 00000000..e5a87c5f --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2443/Issue2443.java @@ -0,0 +1,13 @@ +package com.alibaba.easyexcel.test.temp.issue2443; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +public class Issue2443 { + private int a; + private int b; +} 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 new file mode 100644 index 00000000..57484b74 --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2443/Issue2443Test.java @@ -0,0 +1,56 @@ +package com.alibaba.easyexcel.test.temp.issue2443; + +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.read.listener.PageReadListener; +import com.alibaba.fastjson.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; + +@Ignore +@Slf4j +public class Issue2443Test { + //CS304 (manually written) Issue link: https://github.com/alibaba/easyexcel/issues/2443 + @Test + public void IssueTest1() { + String fileName = TestFileUtil.getPath() + "temp/issue2443" + File.separator + "date1.xlsx"; + EasyExcel.read(fileName, Issue2443.class, new PageReadListener(dataList -> { + for (Issue2443 issueData : dataList) { + log.info("读取到一条数据{}", JSON.toJSONString(issueData)); + } + })).sheet().doRead(); + } + //CS304 (manually written) Issue link: https://github.com/alibaba/easyexcel/issues/2443 + @Test + public void IssueTest2() { + String fileName = TestFileUtil.getPath() + "temp/issue2443" + File.separator + "date2.xlsx"; + EasyExcel.read(fileName, Issue2443.class, new PageReadListener(dataList -> { + for (Issue2443 issueData : dataList) { + log.info("读取到一条数据{}", JSON.toJSONString(issueData)); + } + })).sheet().doRead(); + } + + @Test + public void parseIntegerTest1() throws ParseException { + String string = "1.00"; + ExcelContentProperty contentProperty = null; + int Int = NumberUtils.parseInteger(string,contentProperty); + 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); + } + +} diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/large/LargeData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/LargeData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/large/LargeData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/LargeData.java diff --git a/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 similarity index 97% rename from src/test/java/com/alibaba/easyexcel/test/temp/large/LargeDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/LargeDataListener.java index a5b65565..500cc85f 100644 --- a/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,6 +1,5 @@ package com.alibaba.easyexcel.test.temp.large; -import org.junit.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/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 similarity index 95% rename from src/test/java/com/alibaba/easyexcel/test/temp/large/NoModelLargeDataListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/NoModelLargeDataListener.java index 715dc4f4..aff72adf 100644 --- a/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,7 +2,6 @@ package com.alibaba.easyexcel.test.temp.large; import java.util.Map; -import org.apache.poi.ss.formula.functions.Index; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/large/TempLargeDataTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/TempLargeDataTest.java diff --git a/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 similarity index 95% rename from src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi2Test.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi2Test.java index 0de7d9e7..6e1933ab 100644 --- a/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 @@ -1,6 +1,5 @@ package com.alibaba.easyexcel.test.temp.poi; -import java.io.File; import java.io.IOException; import org.apache.poi.xssf.streaming.SXSSFRow; @@ -14,8 +13,6 @@ import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.alibaba.easyexcel.test.util.TestFileUtil; - /** * 测试poi * diff --git a/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 similarity index 76% rename from src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi3Test.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/Poi3Test.java index 2ff3427d..4eb7714c 100644 --- a/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 @@ -2,35 +2,22 @@ package com.alibaba.easyexcel.test.temp.poi; import java.io.File; import java.io.FileOutputStream; -import java.io.IOException; import java.io.OutputStream; import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey; import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackageAccess; 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.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellCopyPolicy; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; -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.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.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.easyexcel.test.util.TestFileUtil; -import com.alibaba.excel.util.FileUtils; /** * 测试poi diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiEncryptTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiEncryptTest.java diff --git a/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 similarity index 78% rename from src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiFormatTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiFormatTest.java index 1f31f9cc..b20004a9 100644 --- a/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 @@ -1,12 +1,13 @@ package com.alibaba.easyexcel.test.temp.poi; -import java.io.File; import java.io.IOException; +import java.util.Locale; -import org.apache.poi.ss.usermodel.DateUtil; +import org.apache.poi.ss.usermodel.DataFormatter; 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.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -15,8 +16,6 @@ import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.alibaba.easyexcel.test.util.TestFileUtil; - /** * 测试poi * @@ -40,14 +39,15 @@ public class PoiFormatTest { @Test public void lastRowNumXSSF() throws IOException { - String file = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + String file = "/Users/zhuangjiaju/Downloads/测试格式.xlsx"; XSSFWorkbook xssfWorkbook = new XSSFWorkbook(file); LOGGER.info("一共:{}个sheet", xssfWorkbook.getNumberOfSheets()); XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0); LOGGER.info("一共行数:{}", xssfSheet.getLastRowNum()); - XSSFRow row = xssfSheet.getRow(0); - LOGGER.info("第一行数据:{}", row); - xssfSheet.createRow(20); - LOGGER.info("一共行数:{}", xssfSheet.getLastRowNum()); + XSSFRow row = xssfSheet.getRow(1); + XSSFCell xssfCell = row.getCell(0); + DataFormatter d = new DataFormatter(Locale.CHINA); + LOGGER.info("fo:{}", d.formatCellValue(xssfCell)); + } } diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiTest.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/PoiWriteTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/poi/TestCell.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/TestCell.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/poi/TestCell.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/poi/TestCell.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/read/CommentTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/CommentTest.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/read/HDListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HDListener.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/read/HeadListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadListener.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/HeadReadTest.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/read/TestListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/TestListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/read/TestListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/read/TestListener.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData1.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData1.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData1.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData1.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData2.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData2.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData2.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/DemoData2.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgListener.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgListener.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/simple/HgListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgListener.java diff --git a/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 similarity index 97% rename from src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/HgTest.java index 2eb4d1ab..fbfde36f 100644 --- a/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 @@ -12,7 +12,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.cache.MapCache; import com.alibaba.fastjson.JSON; /** diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/simple/JsonData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/JsonData.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/simple/JsonData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/JsonData.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatListener.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatListener.java diff --git a/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 similarity index 96% rename from src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatTest.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/RepeatTest.java index 517220e5..d7cf0080 100644 --- a/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 @@ -2,7 +2,6 @@ package com.alibaba.easyexcel.test.temp.simple; import java.io.FileInputStream; import java.io.IOException; -import java.util.List; import org.junit.Ignore; import org.junit.Test; @@ -13,7 +12,6 @@ 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 com.alibaba.fastjson.JSON; /** * 测试poi diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java similarity index 99% rename from src/test/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java index 3cc54749..77c1285e 100644 --- a/src/test/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/Wirte.java @@ -104,7 +104,7 @@ public class Wirte { // 第一次写入会创建头 excelWriter.write(data(), writeSheet, writeTable0); // 第二次写如也会创建头,然后在第一次的后面写入数据 - /// 千万别忘记finish 会帮忙关闭流 + /// 千万别忘记close 会帮忙关闭流 excelWriter.finish(); } diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteCellHandler.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteCellHandler.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteCellHandler.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteCellHandler.java diff --git a/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 similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteData.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteData.java diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteHandler.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteHandler.java similarity index 90% rename from src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteHandler.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteHandler.java index a82543eb..1650c21a 100644 --- a/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteHandler.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/simple/WriteHandler.java @@ -1,6 +1,5 @@ package com.alibaba.easyexcel.test.temp.simple; -import com.alibaba.excel.write.handler.AbstractSheetWriteHandler; import com.alibaba.excel.write.handler.SheetWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteData.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteData.java new file mode 100644 index 00000000..2ef4b56a --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteData.java @@ -0,0 +1,19 @@ +package com.alibaba.easyexcel.test.temp.write; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadStyle; +import com.alibaba.excel.enums.BooleanEnum; + +import lombok.Data; + +@Data +//@Accessors(chain = true) +public class TempWriteData { + private String name1; + + @ExcelProperty(" 换行\r\n \\ \r\n的名字") + @HeadStyle(wrapped = BooleanEnum.TRUE) + @ContentStyle(wrapped = BooleanEnum.TRUE) + private String name; +} 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 new file mode 100644 index 00000000..22126889 --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteTest.java @@ -0,0 +1,58 @@ +package com.alibaba.easyexcel.test.temp.write; + +import java.util.HashMap; +import java.util.Map; + +import com.alibaba.easyexcel.test.demo.read.CustomStringStringConverter; +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.util.BeanMapUtils; +import com.alibaba.excel.util.ListUtils; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Ignore; +import org.junit.Test; +import org.springframework.cglib.beans.BeanMap; + +@Ignore +@Slf4j +public class TempWriteTest { + + @Test + public void write() { + TempWriteData tempWriteData = new TempWriteData(); + tempWriteData.setName("zs\r\n \\ \r\n t4"); + EasyExcel.write(TestFileUtil.getPath() + "TempWriteTest" + System.currentTimeMillis() + ".xlsx", + TempWriteData.class) + .sheet() + .registerConverter(new CustomStringStringConverter()) + .doWrite(ListUtils.newArrayList(tempWriteData)); + + + EasyExcel.write(TestFileUtil.getPath() + "TempWriteTest" + System.currentTimeMillis() + ".xlsx", + TempWriteData.class) + .sheet() + .doWrite(ListUtils.newArrayList(tempWriteData)); + + } + + @Test + public void cglib() { + TempWriteData tempWriteData = new TempWriteData(); + tempWriteData.setName("1"); + tempWriteData.setName1("2"); + BeanMap beanMap = BeanMapUtils.create(tempWriteData); + + log.info("d1{}", beanMap.get("name")); + log.info("d2{}", beanMap.get("name1")); + + TempWriteData tempWriteData2 = new TempWriteData(); + + Map map = new HashMap<>(); + map.put("name", "zs"); + BeanMap beanMap2 = BeanMapUtils.create(tempWriteData2); + beanMap2.putAll(map); + log.info("3{}", tempWriteData2.getName()); + + } +} diff --git a/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java similarity index 100% rename from src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java rename to easyexcel-test/src/test/java/com/alibaba/easyexcel/test/util/TestFileUtil.java diff --git a/easyexcel-test/src/test/resources/compatibility/t01.xls b/easyexcel-test/src/test/resources/compatibility/t01.xls new file mode 100644 index 00000000..eb0782f5 Binary files /dev/null and b/easyexcel-test/src/test/resources/compatibility/t01.xls differ diff --git a/src/test/resources/converter/converter03.xls b/easyexcel-test/src/test/resources/converter/converter03.xls similarity index 100% rename from src/test/resources/converter/converter03.xls rename to easyexcel-test/src/test/resources/converter/converter03.xls diff --git a/src/test/resources/converter/converter07.xlsx b/easyexcel-test/src/test/resources/converter/converter07.xlsx similarity index 100% rename from src/test/resources/converter/converter07.xlsx rename to easyexcel-test/src/test/resources/converter/converter07.xlsx diff --git a/src/test/resources/converter/converterCsv.csv b/easyexcel-test/src/test/resources/converter/converterCsv.csv similarity index 100% rename from src/test/resources/converter/converterCsv.csv rename to easyexcel-test/src/test/resources/converter/converterCsv.csv diff --git a/src/test/resources/converter/img.jpg b/easyexcel-test/src/test/resources/converter/img.jpg similarity index 100% rename from src/test/resources/converter/img.jpg rename to easyexcel-test/src/test/resources/converter/img.jpg diff --git a/src/test/resources/dataformat/dataformat.xls b/easyexcel-test/src/test/resources/dataformat/dataformat.xls similarity index 100% rename from src/test/resources/dataformat/dataformat.xls rename to easyexcel-test/src/test/resources/dataformat/dataformat.xls diff --git a/src/test/resources/dataformat/dataformat.xlsx b/easyexcel-test/src/test/resources/dataformat/dataformat.xlsx similarity index 100% rename from src/test/resources/dataformat/dataformat.xlsx rename to easyexcel-test/src/test/resources/dataformat/dataformat.xlsx diff --git a/src/test/resources/demo/cellDataDemo.xlsx b/easyexcel-test/src/test/resources/demo/cellDataDemo.xlsx similarity index 100% rename from src/test/resources/demo/cellDataDemo.xlsx rename to easyexcel-test/src/test/resources/demo/cellDataDemo.xlsx diff --git a/src/test/resources/demo/demo.xlsx b/easyexcel-test/src/test/resources/demo/demo.xlsx similarity index 100% rename from src/test/resources/demo/demo.xlsx rename to easyexcel-test/src/test/resources/demo/demo.xlsx diff --git a/src/test/resources/demo/extra.xlsx b/easyexcel-test/src/test/resources/demo/extra.xlsx similarity index 100% rename from src/test/resources/demo/extra.xlsx rename to easyexcel-test/src/test/resources/demo/extra.xlsx diff --git a/src/test/resources/demo/fill/complex.xlsx b/easyexcel-test/src/test/resources/demo/fill/complex.xlsx similarity index 100% rename from src/test/resources/demo/fill/complex.xlsx rename to easyexcel-test/src/test/resources/demo/fill/complex.xlsx diff --git a/src/test/resources/demo/fill/complexFillWithTable.xlsx b/easyexcel-test/src/test/resources/demo/fill/complexFillWithTable.xlsx similarity index 100% rename from src/test/resources/demo/fill/complexFillWithTable.xlsx rename to easyexcel-test/src/test/resources/demo/fill/complexFillWithTable.xlsx diff --git a/src/test/resources/demo/fill/composite.xlsx b/easyexcel-test/src/test/resources/demo/fill/composite.xlsx similarity index 100% rename from src/test/resources/demo/fill/composite.xlsx rename to easyexcel-test/src/test/resources/demo/fill/composite.xlsx diff --git a/src/test/resources/demo/fill/horizontal.xlsx b/easyexcel-test/src/test/resources/demo/fill/horizontal.xlsx similarity index 100% rename from src/test/resources/demo/fill/horizontal.xlsx rename to easyexcel-test/src/test/resources/demo/fill/horizontal.xlsx diff --git a/src/test/resources/demo/fill/list.xlsx b/easyexcel-test/src/test/resources/demo/fill/list.xlsx similarity index 100% rename from src/test/resources/demo/fill/list.xlsx rename to easyexcel-test/src/test/resources/demo/fill/list.xlsx diff --git a/src/test/resources/demo/fill/simple.xlsx b/easyexcel-test/src/test/resources/demo/fill/simple.xlsx similarity index 100% rename from src/test/resources/demo/fill/simple.xlsx rename to easyexcel-test/src/test/resources/demo/fill/simple.xlsx diff --git a/src/test/resources/extra/extra.xls b/easyexcel-test/src/test/resources/extra/extra.xls similarity index 100% rename from src/test/resources/extra/extra.xls rename to easyexcel-test/src/test/resources/extra/extra.xls diff --git a/src/test/resources/extra/extra.xlsx b/easyexcel-test/src/test/resources/extra/extra.xlsx similarity index 100% rename from src/test/resources/extra/extra.xlsx rename to easyexcel-test/src/test/resources/extra/extra.xlsx diff --git a/src/test/resources/fill/annotation.xls b/easyexcel-test/src/test/resources/fill/annotation.xls similarity index 59% rename from src/test/resources/fill/annotation.xls rename to easyexcel-test/src/test/resources/fill/annotation.xls index 8fd19c5a..de09678c 100644 Binary files a/src/test/resources/fill/annotation.xls and b/easyexcel-test/src/test/resources/fill/annotation.xls differ diff --git a/src/test/resources/fill/annotation.xlsx b/easyexcel-test/src/test/resources/fill/annotation.xlsx similarity index 65% rename from src/test/resources/fill/annotation.xlsx rename to easyexcel-test/src/test/resources/fill/annotation.xlsx index 5395232b..2a4a92b6 100644 Binary files a/src/test/resources/fill/annotation.xlsx and b/easyexcel-test/src/test/resources/fill/annotation.xlsx differ diff --git a/src/test/resources/fill/byName.xls b/easyexcel-test/src/test/resources/fill/byName.xls similarity index 100% rename from src/test/resources/fill/byName.xls rename to easyexcel-test/src/test/resources/fill/byName.xls diff --git a/src/test/resources/fill/byName.xlsx b/easyexcel-test/src/test/resources/fill/byName.xlsx similarity index 100% rename from src/test/resources/fill/byName.xlsx rename to easyexcel-test/src/test/resources/fill/byName.xlsx diff --git a/src/test/resources/fill/complex.xls b/easyexcel-test/src/test/resources/fill/complex.xls similarity index 100% rename from src/test/resources/fill/complex.xls rename to easyexcel-test/src/test/resources/fill/complex.xls diff --git a/src/test/resources/fill/complex.xlsx b/easyexcel-test/src/test/resources/fill/complex.xlsx similarity index 100% rename from src/test/resources/fill/complex.xlsx rename to easyexcel-test/src/test/resources/fill/complex.xlsx diff --git a/src/test/resources/fill/composite.xls b/easyexcel-test/src/test/resources/fill/composite.xls similarity index 100% rename from src/test/resources/fill/composite.xls rename to easyexcel-test/src/test/resources/fill/composite.xls diff --git a/src/test/resources/fill/composite.xlsx b/easyexcel-test/src/test/resources/fill/composite.xlsx similarity index 100% rename from src/test/resources/fill/composite.xlsx rename to easyexcel-test/src/test/resources/fill/composite.xlsx diff --git a/src/test/resources/fill/horizontal.xls b/easyexcel-test/src/test/resources/fill/horizontal.xls similarity index 100% rename from src/test/resources/fill/horizontal.xls rename to easyexcel-test/src/test/resources/fill/horizontal.xls diff --git a/src/test/resources/fill/horizontal.xlsx b/easyexcel-test/src/test/resources/fill/horizontal.xlsx similarity index 100% rename from src/test/resources/fill/horizontal.xlsx rename to easyexcel-test/src/test/resources/fill/horizontal.xlsx diff --git a/src/test/resources/fill/simple.csv b/easyexcel-test/src/test/resources/fill/simple.csv similarity index 100% rename from src/test/resources/fill/simple.csv rename to easyexcel-test/src/test/resources/fill/simple.csv diff --git a/src/test/resources/fill/simple.xls b/easyexcel-test/src/test/resources/fill/simple.xls similarity index 100% rename from src/test/resources/fill/simple.xls rename to easyexcel-test/src/test/resources/fill/simple.xls diff --git a/src/test/resources/fill/simple.xlsx b/easyexcel-test/src/test/resources/fill/simple.xlsx similarity index 100% rename from src/test/resources/fill/simple.xlsx rename to easyexcel-test/src/test/resources/fill/simple.xlsx diff --git a/src/test/resources/fill/style.xls b/easyexcel-test/src/test/resources/fill/style.xls similarity index 100% rename from src/test/resources/fill/style.xls rename to easyexcel-test/src/test/resources/fill/style.xls diff --git a/src/test/resources/fill/style.xlsx b/easyexcel-test/src/test/resources/fill/style.xlsx similarity index 100% rename from src/test/resources/fill/style.xlsx rename to easyexcel-test/src/test/resources/fill/style.xlsx diff --git a/src/test/resources/large/fill.xlsx b/easyexcel-test/src/test/resources/large/fill.xlsx similarity index 100% rename from src/test/resources/large/fill.xlsx rename to easyexcel-test/src/test/resources/large/fill.xlsx diff --git a/src/test/resources/large/large07.xlsx b/easyexcel-test/src/test/resources/large/large07.xlsx similarity index 100% rename from src/test/resources/large/large07.xlsx rename to easyexcel-test/src/test/resources/large/large07.xlsx diff --git a/src/test/resources/logback.xml b/easyexcel-test/src/test/resources/logback.xml similarity index 100% rename from src/test/resources/logback.xml rename to easyexcel-test/src/test/resources/logback.xml diff --git a/src/test/resources/multiplesheets/multiplesheets.xls b/easyexcel-test/src/test/resources/multiplesheets/multiplesheets.xls similarity index 100% rename from src/test/resources/multiplesheets/multiplesheets.xls rename to easyexcel-test/src/test/resources/multiplesheets/multiplesheets.xls diff --git a/src/test/resources/multiplesheets/multiplesheets.xlsx b/easyexcel-test/src/test/resources/multiplesheets/multiplesheets.xlsx similarity index 100% rename from src/test/resources/multiplesheets/multiplesheets.xlsx rename to easyexcel-test/src/test/resources/multiplesheets/multiplesheets.xlsx diff --git a/src/test/resources/simple/simple07.xlsx b/easyexcel-test/src/test/resources/simple/simple07.xlsx similarity index 100% rename from src/test/resources/simple/simple07.xlsx rename to easyexcel-test/src/test/resources/simple/simple07.xlsx diff --git a/src/test/resources/temp/issue1663/template.xlsx b/easyexcel-test/src/test/resources/temp/issue1663/template.xlsx similarity index 100% rename from src/test/resources/temp/issue1663/template.xlsx rename to easyexcel-test/src/test/resources/temp/issue1663/template.xlsx diff --git a/easyexcel-test/src/test/resources/temp/issue2443/date1.xlsx b/easyexcel-test/src/test/resources/temp/issue2443/date1.xlsx new file mode 100644 index 00000000..92ef811d Binary files /dev/null and b/easyexcel-test/src/test/resources/temp/issue2443/date1.xlsx differ diff --git a/easyexcel-test/src/test/resources/temp/issue2443/date2.xlsx b/easyexcel-test/src/test/resources/temp/issue2443/date2.xlsx new file mode 100644 index 00000000..c6feb325 Binary files /dev/null and b/easyexcel-test/src/test/resources/temp/issue2443/date2.xlsx differ diff --git a/src/test/resources/template/template03.xls b/easyexcel-test/src/test/resources/template/template03.xls similarity index 100% rename from src/test/resources/template/template03.xls rename to easyexcel-test/src/test/resources/template/template03.xls diff --git a/src/test/resources/template/template07.xlsx b/easyexcel-test/src/test/resources/template/template07.xlsx similarity index 100% rename from src/test/resources/template/template07.xlsx rename to easyexcel-test/src/test/resources/template/template07.xlsx diff --git a/easyexcel/pom.xml b/easyexcel/pom.xml new file mode 100644 index 00000000..303f79ad --- /dev/null +++ b/easyexcel/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + + com.alibaba + easyexcel-parent + ${revision} + ../pom.xml + + + jar + easyexcel + + + + + com.alibaba + easyexcel-core + + + + diff --git a/easyexcel/src/main/java/com/alibaba/excel/Empty.java b/easyexcel/src/main/java/com/alibaba/excel/Empty.java new file mode 100644 index 00000000..7d936df0 --- /dev/null +++ b/easyexcel/src/main/java/com/alibaba/excel/Empty.java @@ -0,0 +1,9 @@ +package com.alibaba.excel; + +/** + * empty + * + * @author Jiaju Zhuang + */ +public class Empty { +} diff --git a/mvnw b/mvnw old mode 100644 new mode 100755 index d560832b..5643201c --- a/mvnw +++ b/mvnw @@ -8,7 +8,7 @@ # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # -# https://www.apache.org/licenses/LICENSE-2.0 +# 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 @@ -19,7 +19,7 @@ # ---------------------------------------------------------------------------- # ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script +# Maven Start Up Batch script # # Required ENV vars: # ------------------ @@ -36,6 +36,10 @@ if [ -z "$MAVEN_SKIP_RC" ] ; then + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + if [ -f /etc/mavenrc ] ; then . /etc/mavenrc fi @@ -145,7 +149,7 @@ if [ -z "$JAVACMD" ] ; then JAVACMD="$JAVA_HOME/bin/java" fi else - JAVACMD="`which java`" + JAVACMD="`\\unset -f command; \\command -v java`" fi fi @@ -212,9 +216,9 @@ else echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." fi if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.3/maven-wrapper-0.5.3.jar" + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.3/maven-wrapper-0.5.3.jar" + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" fi while IFS="=" read key value; do case "$key" in (wrapperUrl) jarUrl="$value"; break ;; @@ -233,9 +237,9 @@ else echo "Found wget ... using wget" fi if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" fi elif command -v curl > /dev/null; then if [ "$MVNW_VERBOSE" = true ]; then @@ -246,7 +250,7 @@ else else curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f fi - + else if [ "$MVNW_VERBOSE" = true ]; then echo "Falling back to using Java to download" @@ -296,10 +300,17 @@ if $cygwin; then MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` fi +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain exec "$JAVACMD" \ $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd index d06ac67f..8a15b7f3 100644 --- a/mvnw.cmd +++ b/mvnw.cmd @@ -7,7 +7,7 @@ @REM "License"); you may not use this file except in compliance @REM with the License. You may obtain a copy of the License at @REM -@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM http://www.apache.org/licenses/LICENSE-2.0 @REM @REM Unless required by applicable law or agreed to in writing, @REM software distributed under the License is distributed on an @@ -18,7 +18,7 @@ @REM ---------------------------------------------------------------------------- @REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script +@REM Maven Start Up Batch script @REM @REM Required ENV vars: @REM JAVA_HOME - location of a JDK home dir @@ -26,7 +26,7 @@ @REM Optional ENV vars @REM M2_HOME - location of maven2's installed home dir @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven @REM e.g. to debug Maven itself, use @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 @@ -37,7 +37,7 @@ @echo off @REM set title of command window title %0 -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% @REM set %HOME% to equivalent of $HOME @@ -46,8 +46,8 @@ if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") @REM Execute a user defined script before this one if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre @REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* :skipRcPre @setlocal @@ -120,23 +120,27 @@ SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.3/maven-wrapper-0.5.3.jar" +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B ) @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central @REM This allows using the maven wrapper in projects that prohibit checking in binary data. if exist %WRAPPER_JAR% ( - echo Found %WRAPPER_JAR% + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) ) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.3/maven-wrapper-0.5.3.jar" - ) - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + powershell -Command "&{"^ "$webclient = new-object System.Net.WebClient;"^ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ @@ -144,11 +148,23 @@ if exist %WRAPPER_JAR% ( "}"^ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ "}" - echo Finished downloading %WRAPPER_JAR% + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) ) @REM End of extension -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* if ERRORLEVEL 1 goto error goto end @@ -158,15 +174,15 @@ set ERROR_CODE=1 :end @endlocal & set ERROR_CODE=%ERROR_CODE% -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost @REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" :skipRcPost @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause +if "%MAVEN_BATCH_PAUSE%"=="on" pause -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% -exit /B %ERROR_CODE% +cmd /C exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml index 3aa5fa65..ac7ce4a2 100644 --- a/pom.xml +++ b/pom.xml @@ -3,22 +3,29 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.alibaba - easyexcel - 3.0.5 - jar - easyexcel - + easyexcel-parent + pom + ${revision} + easyexcel-parent easyexcel is a excel handle tools written in Java - https://github.com/alibaba/easyexcel 2018 + + easyexcel-core + easyexcel-support + easyexcel-test + easyexcel + + + 3.1.0 UTF-8 1.8 true true + true @@ -26,13 +33,6 @@ scm:git:https://git@github.com/alibaba/easyexcel.git - - - - - - - Alibaba Group @@ -56,81 +56,7 @@ - - - org.apache.poi - poi - 4.1.2 - - - org.apache.poi - poi-ooxml - 4.1.2 - - - org.apache.poi - poi-ooxml-schemas - 4.1.2 - - - org.apache.commons - commons-csv - 1.8 - - - cglib - cglib - 3.3.0 - - - org.slf4j - slf4j-api - 1.7.32 - - - org.ehcache - ehcache - 3.8.1 - - - org.projectlombok - lombok - 1.18.20 - provided - - - - ch.qos.logback - logback-classic - 1.2.5 - test - - - com.alibaba - fastjson - 1.2.78 - test - - - org.springframework.boot - spring-boot - 2.5.4 - test - - - org.springframework.boot - spring-boot-starter-web - 2.5.4 - test - - - junit - junit - 4.13.2 - test - - ossrh @@ -142,13 +68,170 @@ + + + + com.alibaba + easyexcel + ${revision} + + + + com.alibaba + easyexcel-core + ${revision} + + + + com.alibaba + easyexcel-support + ${revision} + + + + org.apache.poi + poi + 4.1.2 + + + org.apache.poi + poi-ooxml + 4.1.2 + + + org.apache.poi + poi-ooxml-schemas + 4.1.2 + + + org.apache.commons + commons-csv + 1.8 + + + org.slf4j + slf4j-api + 1.7.32 + + + org.ehcache + ehcache + 3.9.9 + + + org.projectlombok + lombok + 1.18.20 + + + + + org.springframework + spring-core + 5.3.15 + + + + + ch.qos.logback + logback-classic + 1.2.5 + + + com.alibaba + fastjson + 1.2.78 + + + org.springframework.boot + spring-boot-starter-web + 2.6.3 + + + junit + junit + 4.13.2 + + + + + + + + org.slf4j + slf4j-api + + + org.projectlombok + lombok + provided + + + + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.8 + + + com.alibaba.p3c + p3c-pmd + 1.3.6 + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.1.0 + + + org.projectlombok + lombok-maven-plugin + 1.18.20.0 + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + org.codehaus.mojo + flatten-maven-plugin + 1.2.7 + + + + org.apache.maven.plugins maven-pmd-plugin - 3.8 true true @@ -184,18 +267,10 @@ - - - com.alibaba.p3c - p3c-pmd - 1.3.6 - - org.apache.maven.plugins maven-compiler-plugin - 3.8.1 1.8 1.8 @@ -204,7 +279,6 @@ org.apache.maven.plugins maven-source-plugin - 3.2.1 true @@ -220,7 +294,6 @@ org.apache.maven.plugins maven-gpg-plugin - 1.6 verify @@ -233,7 +306,6 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.1.0 attach-javadocs @@ -246,7 +318,6 @@ org.projectlombok lombok-maven-plugin - 1.18.20.0 generate-sources @@ -258,14 +329,60 @@ org.apache.maven.plugins - maven-surefire-plugin - 2.22.2 + maven-shade-plugin + + + package + + shade + + + + + ${project.groupId}:${project.artifactId} + + + + + org.springframework + com.alibaba.easyexcel.support + + + + + + + + + org.codehaus.mojo + flatten-maven-plugin - - com/alibaba/easyexcel/test/core/**/*.java - - true + true + resolveCiFriendliesOnly + + + flatten.process-resources + process-resources + + flatten + + + + flatten + package + + flatten + + + + flatten.clean + clean + + clean + + + diff --git a/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationDataTest.java b/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationDataTest.java deleted file mode 100644 index 93680d69..00000000 --- a/src/test/java/com/alibaba/easyexcel/test/core/fill/annotation/FillAnnotationDataTest.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.alibaba.easyexcel.test.core.fill.annotation; - -import java.io.File; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import com.alibaba.easyexcel.test.util.TestFileUtil; -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.util.DateUtils; - -import org.apache.poi.ss.usermodel.Cell; -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.apache.poi.ss.util.CellRangeAddress; -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) -public class FillAnnotationDataTest { - - private static File file07; - private static File file03; - private static File fileTemplate07; - private static File fileTemplate03; - - @BeforeClass - public static void init() { - file07 = TestFileUtil.createNewFile("fillAnnotation07.xlsx"); - file03 = TestFileUtil.createNewFile("fillAnnotation03.xls"); - fileTemplate07 = TestFileUtil.readFile("fill" + File.separator + "annotation.xlsx"); - fileTemplate03 = TestFileUtil.readFile("fill" + File.separator + "annotation.xls"); - } - - @Test - public void t01ReadAndWrite07() throws Exception { - readAndWrite(file07, fileTemplate07); - } - - @Test - public void t02ReadAndWrite03() throws Exception { - readAndWrite(file03, fileTemplate03); - } - - private void readAndWrite(File file, File fileTemplate) throws Exception { - EasyExcel.write().file(file).head(FillAnnotationData.class).withTemplate(fileTemplate).sheet().doFill(data()); - - Workbook workbook = WorkbookFactory.create(file); - Sheet sheet = workbook.getSheetAt(0); - - Row row1 = sheet.getRow(1); - Assert.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()); - String dataFormatString = cell10.getCellStyle().getDataFormatString(); - Assert.assertEquals("yyyy年MM月dd日HH时mm分ss秒", dataFormatString); - Cell cell11 = row1.getCell(1); - Assert.assertEquals(99.99, cell11.getNumericCellValue(), 2); - boolean hasMerge = false; - for (CellRangeAddress mergedRegion : sheet.getMergedRegions()) { - if (mergedRegion.getFirstRow() == 1 && mergedRegion.getLastRow() == 1 - && mergedRegion.getFirstColumn() == 2 && mergedRegion.getLastColumn() == 3) { - hasMerge = true; - } - } - Assert.assertTrue(hasMerge); - } - - private List data() throws Exception { - List list = new ArrayList<>(); - FillAnnotationData data = new FillAnnotationData(); - data.setDate(DateUtils.parseDate("2020-01-01 01:01:01")); - data.setNumber(99.99); - data.setString1("string1"); - data.setString2("string2"); - list.add(data); - list.add(data); - list.add(data); - list.add(data); - list.add(data); - return list; - } -} diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java b/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java index d0f90fe9..29c707d3 100644 --- a/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java @@ -1,241 +1,3 @@ -package com.alibaba.easyexcel.test.demo.fill; - -import java.io.File; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.alibaba.easyexcel.test.util.TestFileUtil; -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.ExcelWriter; -import com.alibaba.excel.enums.WriteDirectionEnum; -import com.alibaba.excel.util.ListUtils; -import com.alibaba.excel.util.MapUtils; -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; - /** - * 写的填充写法 - * - * @author Jiaju Zhuang - * @since 2.1.1 + * Documents have been migrated to https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java */ -@Ignore -public class FillTest { - /** - * 最简单的填充 - * - * @since 2.1.1 - */ - @Test - public void simpleFill() { - // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 - String templateFileName = - TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "simple.xlsx"; - - // 方案1 根据对象填充 - String fileName = TestFileUtil.getPath() + "simpleFill" + System.currentTimeMillis() + ".xlsx"; - // 这里 会填充到第一个sheet, 然后文件流会自动关闭 - FillData fillData = new FillData(); - fillData.setName("张三"); - fillData.setNumber(5.2); - EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(fillData); - - // 方案2 根据Map填充 - fileName = TestFileUtil.getPath() + "simpleFill" + System.currentTimeMillis() + ".xlsx"; - // 这里 会填充到第一个sheet, 然后文件流会自动关闭 - Map map = MapUtils.newHashMap(); - map.put("name", "张三"); - map.put("number", 5.2); - EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map); - } - - /** - * 填充列表 - * - * @since 2.1.1 - */ - @Test - public void listFill() { - // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 - // 填充list 的时候还要注意 模板中{.} 多了个点 表示list - String templateFileName = - TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "list.xlsx"; - - // 方案1 一下子全部放到内存里面 并填充 - String fileName = TestFileUtil.getPath() + "listFill" + System.currentTimeMillis() + ".xlsx"; - // 这里 会填充到第一个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 分多次 填充 会使用文件缓存(省内存) - fileName = TestFileUtil.getPath() + "listFill" + System.currentTimeMillis() + ".xlsx"; - ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - excelWriter.fill(data(), writeSheet); - excelWriter.fill(data(), writeSheet); - // 千万别忘记关闭流 - excelWriter.finish(); - } - - /** - * 复杂的填充 - * - * @since 2.1.1 - */ - @Test - public void complexFill() { - // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 - // {} 代表普通变量 {.} 代表是list的变量 - String templateFileName = - TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "complex.xlsx"; - - String fileName = TestFileUtil.getPath() + "complexFill" + System.currentTimeMillis() + ".xlsx"; - ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。 - // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用 - // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存 - // 如果数据量大 list不是最后一行 参照下一个 - FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); - excelWriter.fill(data(), fillConfig, writeSheet); - excelWriter.fill(data(), fillConfig, writeSheet); - Map map = MapUtils.newHashMap(); - map.put("date", "2019年10月9日13:28:28"); - map.put("total", 1000); - excelWriter.fill(map, writeSheet); - excelWriter.finish(); - } - - /** - * 数据量大的复杂填充 - *

- * 这里的解决方案是 确保模板list为最后一行,然后再拼接table.还有03版没救,只能刚正面加内存。 - * - * @since 2.1.1 - */ - @Test - public void complexFillWithTable() { - // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 - // {} 代表普通变量 {.} 代表是list的变量 - // 这里模板 删除了list以后的数据,也就是统计的这一行 - String templateFileName = - TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "complexFillWithTable.xlsx"; - - String fileName = TestFileUtil.getPath() + "complexFillWithTable" + System.currentTimeMillis() + ".xlsx"; - ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - // 直接写入数据 - excelWriter.fill(data(), writeSheet); - excelWriter.fill(data(), writeSheet); - - // 写入list之前的数据 - Map map = new HashMap(); - map.put("date", "2019年10月9日13:28:28"); - excelWriter.fill(map, writeSheet); - - // list 后面还有个统计 想办法手动写入 - // 这里偷懒直接用list 也可以用对象 - List> totalListList = ListUtils.newArrayList(); - List totalList = ListUtils.newArrayList(); - totalListList.add(totalList); - totalList.add(null); - totalList.add(null); - totalList.add(null); - // 第四列 - totalList.add("统计:1000"); - // 这里是write 别和fill 搞错了 - excelWriter.write(totalListList, writeSheet); - excelWriter.finish(); - // 总体上写法比较复杂 但是也没有想到好的版本 异步的去写入excel 不支持行的删除和移动,也不支持备注这种的写入,所以也排除了可以 - // 新建一个 然后一点点复制过来的方案,最后导致list需要新增行的时候,后面的列的数据没法后移,后续会继续想想解决方案 - } - - /** - * 横向的填充 - * - * @since 2.1.1 - */ - @Test - public void horizontalFill() { - // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 - // {} 代表普通变量 {.} 代表是list的变量 - String templateFileName = - TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "horizontal.xlsx"; - - String fileName = TestFileUtil.getPath() + "horizontalFill" + System.currentTimeMillis() + ".xlsx"; - ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); - excelWriter.fill(data(), fillConfig, writeSheet); - excelWriter.fill(data(), fillConfig, writeSheet); - - Map map = new HashMap(); - map.put("date", "2019年10月9日13:28:28"); - excelWriter.fill(map, writeSheet); - - // 别忘记关闭流 - excelWriter.finish(); - } - - /** - * 多列表组合填充填充 - * - * @since 2.2.0-beta1 - */ - @Test - public void compositeFill() { - // 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替 - // {} 代表普通变量 {.} 代表是list的变量 {前缀.} 前缀可以区分不同的list - String templateFileName = - TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "composite.xlsx"; - - String fileName = TestFileUtil.getPath() + "compositeFill" + System.currentTimeMillis() + ".xlsx"; - ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build(); - WriteSheet writeSheet = EasyExcel.writerSheet().build(); - FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build(); - // 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 data1,然后多个list必须用 FillWrapper包裹 - excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet); - excelWriter.fill(new FillWrapper("data1", data()), fillConfig, writeSheet); - excelWriter.fill(new FillWrapper("data2", data()), writeSheet); - excelWriter.fill(new FillWrapper("data2", data()), writeSheet); - excelWriter.fill(new FillWrapper("data3", data()), writeSheet); - excelWriter.fill(new FillWrapper("data3", data()), writeSheet); - - Map map = new HashMap(); - //map.put("date", "2019年10月9日13:28:28"); - map.put("date", new Date()); - - excelWriter.fill(map, writeSheet); - - // 别忘记关闭流 - excelWriter.finish(); - } - - private List data() { - List list = ListUtils.newArrayList(); - for (int i = 0; i < 10; i++) { - FillData fillData = new FillData(); - list.add(fillData); - fillData.setName("张三"); - fillData.setNumber(5.2); - fillData.setDate(new Date()); - } - return list; - } -} diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java b/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java index a97d2c1e..b8d7bffc 100644 --- a/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java @@ -1,325 +1,3 @@ -package com.alibaba.easyexcel.test.demo.read; - -import java.io.File; -import java.util.List; -import java.util.Map; - -import com.alibaba.easyexcel.test.util.TestFileUtil; -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.ExcelReader; -import com.alibaba.excel.annotation.ExcelProperty; -import com.alibaba.excel.annotation.format.DateTimeFormat; -import com.alibaba.excel.annotation.format.NumberFormat; -import com.alibaba.excel.context.AnalysisContext; -import com.alibaba.excel.converters.DefaultConverterLoader; -import com.alibaba.excel.enums.CellExtraTypeEnum; -import com.alibaba.excel.read.listener.PageReadListener; -import com.alibaba.excel.read.listener.ReadListener; -import com.alibaba.excel.read.metadata.ReadSheet; -import com.alibaba.excel.util.ListUtils; -import com.alibaba.fastjson.JSON; - -import lombok.extern.slf4j.Slf4j; -import org.junit.Ignore; -import org.junit.Test; - /** - * 读的常见写法 - * - * @author Jiaju Zhuang + * Documents have been migrated to https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java */ -@Ignore -@Slf4j -public class ReadTest { - - /** - * 最简单的读 - *

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

- * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener} - *

- * 3. 直接读即可 - */ - @Test - public void simpleRead() { - // 写法1:JDK8+ ,不用额外写一个DemoDataListener - // since: 3.0.0-beta1 - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭 - // 这里每次会读取3000条数据 然后返回过来 直接调用使用数据就行 - EasyExcel.read(fileName, DemoData.class, new PageReadListener(dataList -> { - for (DemoData demoData : dataList) { - log.info("读取到一条数据{}", JSON.toJSONString(demoData)); - } - })).sheet().doRead(); - - // 写法2: - // 匿名内部类 不用额外写一个DemoDataListener - fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭 - EasyExcel.read(fileName, DemoData.class, new ReadListener() { - /** - * 单次缓存的数据量 - */ - public static final int BATCH_COUNT = 100; - /** - *临时存储 - */ - private List cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT); - - @Override - public void invoke(DemoData data, AnalysisContext context) { - cachedDataList.add(data); - if (cachedDataList.size() >= BATCH_COUNT) { - saveData(); - // 存储完成清理 list - cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT); - } - } - - @Override - public void doAfterAllAnalysed(AnalysisContext context) { - saveData(); - } - - /** - * 加上存储数据库 - */ - private void saveData() { - log.info("{}条数据,开始存储数据库!", cachedDataList.size()); - log.info("存储数据库成功!"); - } - }).sheet().doRead(); - - // 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去 - // 写法3: - fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭 - EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead(); - - // 写法4: - fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 一个文件一个reader - ExcelReader excelReader = null; - try { - excelReader = EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).build(); - // 构建一个sheet 这里可以指定名字或者no - ReadSheet readSheet = EasyExcel.readSheet(0).build(); - // 读取一个sheet - excelReader.read(readSheet); - } finally { - if (excelReader != null) { - // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的 - excelReader.finish(); - } - } - } - - /** - * 指定列的下标或者列名 - * - *

- * 1. 创建excel对应的实体对象,并使用{@link ExcelProperty}注解. 参照{@link IndexOrNameData} - *

- * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link IndexOrNameDataListener} - *

- * 3. 直接读即可 - */ - @Test - public void indexOrNameRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 这里默认读取第一个sheet - EasyExcel.read(fileName, IndexOrNameData.class, new IndexOrNameDataListener()).sheet().doRead(); - } - - /** - * 读多个或者全部sheet,这里注意一个sheet不能读取多次,多次读取需要重新读取文件 - *

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

- * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener} - *

- * 3. 直接读即可 - */ - @Test - public void repeatedRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 读取全部sheet - // 这里需要注意 DemoDataListener的doAfterAllAnalysed 会在每个sheet读取完毕后调用一次。然后所有sheet都会往同一个DemoDataListener里面写 - EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).doReadAll(); - - // 读取部分sheet - fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - ExcelReader excelReader = null; - try { - excelReader = EasyExcel.read(fileName).build(); - - // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener - ReadSheet readSheet1 = - EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new DemoDataListener()).build(); - ReadSheet readSheet2 = - EasyExcel.readSheet(1).head(DemoData.class).registerReadListener(new DemoDataListener()).build(); - // 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能 - excelReader.read(readSheet1, readSheet2); - } finally { - if (excelReader != null) { - // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的 - excelReader.finish(); - } - } - } - - /** - * 日期、数字或者自定义格式转换 - *

- * 默认读的转换器{@link DefaultConverterLoader#loadDefaultReadConverter()} - *

- * 1. 创建excel对应的实体对象 参照{@link ConverterData}.里面可以使用注解{@link DateTimeFormat}、{@link NumberFormat}或者自定义注解 - *

- * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link ConverterDataListener} - *

- * 3. 直接读即可 - */ - @Test - public void converterRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 这里 需要指定读用哪个class去读,然后读取第一个sheet - EasyExcel.read(fileName, ConverterData.class, new ConverterDataListener()) - // 这里注意 我们也可以registerConverter来指定自定义转换器, 但是这个转换变成全局了, 所有java为string,excel为string的都会用这个转换器。 - // 如果就想单个字段使用请使用@ExcelProperty 指定converter - // .registerConverter(new CustomStringStringConverter()) - // 读取sheet - .sheet().doRead(); - } - - /** - * 多行头 - * - *

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

- * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener} - *

- * 3. 设置headRowNumber参数,然后读。 这里要注意headRowNumber如果不指定, 会根据你传入的class的{@link ExcelProperty#value()}里面的表头的数量来决定行数, - * 如果不传入class则默认为1.当然你指定了headRowNumber不管是否传入class都是以你传入的为准。 - */ - @Test - public void complexHeaderRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 这里 需要指定读用哪个class去读,然后读取第一个sheet - EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet() - // 这里可以设置1,因为头就是一行。如果多行头,可以设置其他值。不传入也可以,因为默认会根据DemoData 来解析,他没有指定头,也就是默认1行 - .headRowNumber(1).doRead(); - } - - /** - * 读取表头数据 - * - *

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

- * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoHeadDataListener} - *

- * 3. 直接读即可 - */ - @Test - public void headerRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 这里 需要指定读用哪个class去读,然后读取第一个sheet - EasyExcel.read(fileName, DemoData.class, new DemoHeadDataListener()).sheet().doRead(); - } - - /** - * 额外信息(批注、超链接、合并单元格信息读取) - *

- * 由于是流式读取,没法在读取到单元格数据的时候直接读取到额外信息,所以只能最后通知哪些单元格有哪些额外信息 - * - *

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

- * 2. 由于默认异步读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoExtraListener} - *

- * 3. 直接读即可 - * - * @since 2.2.0-beat1 - */ - @Test - public void extraRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "extra.xlsx"; - // 这里 需要指定读用哪个class去读,然后读取第一个sheet - EasyExcel.read(fileName, DemoExtraData.class, new DemoExtraListener()) - // 需要读取批注 默认不读取 - .extraRead(CellExtraTypeEnum.COMMENT) - // 需要读取超链接 默认不读取 - .extraRead(CellExtraTypeEnum.HYPERLINK) - // 需要读取合并单元格信息 默认不读取 - .extraRead(CellExtraTypeEnum.MERGE).sheet().doRead(); - } - - /** - * 读取公式和单元格类型 - * - *

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

- * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoHeadDataListener} - *

- * 3. 直接读即可 - * - * @since 2.2.0-beat1 - */ - @Test - public void cellDataRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "cellDataDemo.xlsx"; - // 这里 需要指定读用哪个class去读,然后读取第一个sheet - EasyExcel.read(fileName, CellDataReadDemoData.class, new CellDataDemoHeadDataListener()).sheet().doRead(); - } - - /** - * 数据转换等异常处理 - * - *

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

- * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoExceptionListener} - *

- * 3. 直接读即可 - */ - @Test - public void exceptionRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 这里 需要指定读用哪个class去读,然后读取第一个sheet - EasyExcel.read(fileName, ExceptionDemoData.class, new DemoExceptionListener()).sheet().doRead(); - } - - /** - * 同步的返回,不推荐使用,如果数据量大会把数据放到内存里面 - */ - @Test - public void synchronousRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finish - List list = EasyExcel.read(fileName).head(DemoData.class).sheet().doReadSync(); - for (DemoData data : list) { - log.info("读取到数据:{}", JSON.toJSONString(data)); - } - - // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish - List> listMap = EasyExcel.read(fileName).sheet().doReadSync(); - for (Map data : listMap) { - // 返回每条数据的键值对 表示所在的列 和所在列的值 - log.info("读取到数据:{}", JSON.toJSONString(data)); - } - } - - /** - * 不创建对象的读 - */ - @Test - public void noModelRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - // 这里 只要,然后读取第一个sheet 同步读取会自动finish - EasyExcel.read(fileName, new NoModelDataListener()).sheet().doRead(); - } -} diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java b/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java index 6fd79db4..c21cd0b2 100644 --- a/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java @@ -1,111 +1,3 @@ -package com.alibaba.easyexcel.test.demo.web; - -import java.io.IOException; -import java.net.URLEncoder; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletResponse; - -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.util.ListUtils; -import com.alibaba.excel.util.MapUtils; -import com.alibaba.fastjson.JSON; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.multipart.MultipartFile; - /** - * web读写案例 - * - * @author Jiaju Zhuang - **/ -@Controller -public class WebTest { - - @Autowired - private UploadDAO uploadDAO; - - /** - * 文件下载(失败了会返回一个有部分数据的Excel) - *

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

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

- * 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大 - */ - @GetMapping("download") - public void download(HttpServletResponse response) throws IOException { - // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman - response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - response.setCharacterEncoding("utf-8"); - // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 - String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20"); - response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); - - EasyExcel.write(response.getOutputStream()).sheet("模板").doWrite(data()); - } - - /** - * 文件下载并且失败的时候返回json(默认失败了会返回一个有部分数据的Excel) - * - * @since 2.1.1 - */ - @GetMapping("downloadFailedUsingJson") - public void downloadFailedUsingJson(HttpServletResponse response) throws IOException { - // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman - try { - response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - response.setCharacterEncoding("utf-8"); - // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 - String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20"); - response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); - // 这里需要设置不关闭流 - EasyExcel.write(response.getOutputStream(), DownloadData.class).autoCloseStream(Boolean.FALSE).sheet("模板") - .doWrite(data()); - } catch (Exception e) { - // 重置response - response.reset(); - response.setContentType("application/json"); - response.setCharacterEncoding("utf-8"); - Map map = MapUtils.newHashMap(); - map.put("status", "failure"); - map.put("message", "下载文件失败" + e.getMessage()); - response.getWriter().println(JSON.toJSONString(map)); - } - } - - /** - * 文件上传 - *

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

- * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link UploadDataListener} - *

- * 3. 直接读即可 - */ - @PostMapping("upload") - @ResponseBody - public String upload(MultipartFile file) throws IOException { - EasyExcel.read(file.getInputStream(), UploadData.class, new UploadDataListener(uploadDAO)).sheet().doRead(); - return "success"; - } - - private List data() { - List list = ListUtils.newArrayList(); - for (int i = 0; i < 10; i++) { - DownloadData data = new DownloadData(); - data.setString("字符串" + 0); - data.setDate(new Date()); - data.setDoubleData(0.56); - list.add(data); - } - return list; - } -} + * Documents have been migrated to https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java + */ diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java b/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java index 463d60c3..f152846a 100644 --- a/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java @@ -1,794 +1,3 @@ -package com.alibaba.easyexcel.test.demo.write; - -import java.io.File; -import java.io.InputStream; -import java.net.URL; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import com.alibaba.easyexcel.test.util.TestFileUtil; -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.ExcelWriter; -import com.alibaba.excel.annotation.ExcelProperty; -import com.alibaba.excel.annotation.format.DateTimeFormat; -import com.alibaba.excel.annotation.format.NumberFormat; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.CellDataTypeEnum; -import com.alibaba.excel.metadata.data.CommentData; -import com.alibaba.excel.metadata.data.FormulaData; -import com.alibaba.excel.metadata.data.HyperlinkData; -import com.alibaba.excel.metadata.data.HyperlinkData.HyperlinkType; -import com.alibaba.excel.metadata.data.ImageData; -import com.alibaba.excel.metadata.data.ImageData.ImageType; -import com.alibaba.excel.metadata.data.RichTextStringData; -import com.alibaba.excel.metadata.data.WriteCellData; -import com.alibaba.excel.util.BooleanUtils; -import com.alibaba.excel.util.FileUtils; -import com.alibaba.excel.util.ListUtils; -import com.alibaba.excel.write.handler.CellWriteHandler; -import com.alibaba.excel.write.handler.context.CellWriteHandlerContext; -import com.alibaba.excel.write.merge.LoopMergeStrategy; -import com.alibaba.excel.write.metadata.WriteSheet; -import com.alibaba.excel.write.metadata.WriteTable; -import com.alibaba.excel.write.metadata.style.WriteCellStyle; -import com.alibaba.excel.write.metadata.style.WriteFont; -import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; -import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; - -import org.apache.poi.ss.usermodel.Cell; -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.apache.poi.xssf.streaming.SXSSFSheet; -import org.junit.Ignore; -import org.junit.Test; - /** - * 写的常见写法 - * - * @author Jiaju Zhuang + * Documents have been migrated to https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java */ -@Ignore -public class WriteTest { - - /** - * 最简单的写 - *

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

- * 2. 直接写即可 - */ - @Test - public void simpleWrite() { - // 写法1 JDK8+ - // since: 3.0.0-beta1 - String fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - // 如果这里想使用03 则 传入excelType参数即可 - EasyExcel.write(fileName, DemoData.class) - .sheet("模板") - .doWrite(() -> { - // 分页查询数据 - return data(); - }); - - // 写法2 - fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - // 如果这里想使用03 则 传入excelType参数即可 - EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data()); - - // 写法3 - fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写 - ExcelWriter excelWriter = null; - try { - excelWriter = EasyExcel.write(fileName, DemoData.class).build(); - WriteSheet writeSheet = EasyExcel.writerSheet("模板").build(); - excelWriter.write(data(), writeSheet); - } finally { - // 千万别忘记finish 会帮忙关闭流 - if (excelWriter != null) { - excelWriter.finish(); - } - } - } - - /** - * 根据参数只导出指定列 - *

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

- * 2. 根据自己或者排除自己需要的列 - *

- * 3. 直接写即可 - * - * @since 2.1.1 - */ - @Test - public void excludeOrIncludeWrite() { - String fileName = TestFileUtil.getPath() + "excludeOrIncludeWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里需要注意 在使用ExcelProperty注解的使用,如果想不空列则需要加入order字段,而不是index,order会忽略空列,然后继续往后,而index,不会忽略空列,在第几列就是第几列。 - - // 根据用户传入字段 假设我们要忽略 date - Set excludeColumnFiledNames = new HashSet<>(); - excludeColumnFiledNames.add("date"); - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, DemoData.class).excludeColumnFiledNames(excludeColumnFiledNames).sheet("模板") - .doWrite(data()); - - fileName = TestFileUtil.getPath() + "excludeOrIncludeWrite" + System.currentTimeMillis() + ".xlsx"; - // 根据用户传入字段 假设我们只要导出 date - Set includeColumnFiledNames = new HashSet<>(); - includeColumnFiledNames.add("date"); - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, DemoData.class).includeColumnFiledNames(includeColumnFiledNames).sheet("模板") - .doWrite(data()); - } - - /** - * 指定写入的列 - *

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

- * 2. 使用{@link ExcelProperty}注解指定写入的列 - *

- * 3. 直接写即可 - */ - @Test - public void indexWrite() { - String fileName = TestFileUtil.getPath() + "indexWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, IndexData.class).sheet("模板").doWrite(data()); - } - - /** - * 复杂头写入 - *

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

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

- * 3. 直接写即可 - */ - @Test - public void complexHeadWrite() { - String fileName = TestFileUtil.getPath() + "complexHeadWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, ComplexHeadData.class).sheet("模板").doWrite(data()); - } - - /** - * 重复多次写入 - *

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

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

- * 3. 直接调用二次写入即可 - */ - @Test - public void repeatedWrite() { - // 方法1 如果写到同一个sheet - String fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; - ExcelWriter excelWriter = null; - try { - // 这里 需要指定写用哪个class去写 - excelWriter = EasyExcel.write(fileName, DemoData.class).build(); - // 这里注意 如果同一个sheet只要创建一次 - WriteSheet writeSheet = EasyExcel.writerSheet("模板").build(); - // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来 - for (int i = 0; i < 5; i++) { - // 分页去数据库查询数据 这里可以去数据库查询每一页的数据 - List data = data(); - excelWriter.write(data, writeSheet); - } - } finally { - // 千万别忘记finish 会帮忙关闭流 - if (excelWriter != null) { - excelWriter.finish(); - } - } - - // 方法2 如果写到不同的sheet 同一个对象 - fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; - try { - // 这里 指定文件 - excelWriter = EasyExcel.write(fileName, DemoData.class).build(); - // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面 - for (int i = 0; i < 5; i++) { - // 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样 - WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).build(); - // 分页去数据库查询数据 这里可以去数据库查询每一页的数据 - List data = data(); - excelWriter.write(data, writeSheet); - } - } finally { - // 千万别忘记finish 会帮忙关闭流 - if (excelWriter != null) { - excelWriter.finish(); - } - } - - // 方法3 如果写到不同的sheet 不同的对象 - fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx"; - try { - // 这里 指定文件 - excelWriter = EasyExcel.write(fileName).build(); - // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面 - for (int i = 0; i < 5; i++) { - // 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样。这里注意DemoData.class 可以每次都变,我这里为了方便 所以用的同一个class - // 实际上可以一直变 - WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).head(DemoData.class).build(); - // 分页去数据库查询数据 这里可以去数据库查询每一页的数据 - List data = data(); - excelWriter.write(data, writeSheet); - } - } finally { - // 千万别忘记finish 会帮忙关闭流 - if (excelWriter != null) { - excelWriter.finish(); - } - } - } - - /** - * 日期、数字或者自定义格式转换 - *

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

- * 2. 使用{@link ExcelProperty}配合使用注解{@link DateTimeFormat}、{@link NumberFormat}或者自定义注解 - *

- * 3. 直接写即可 - */ - @Test - public void converterWrite() { - String fileName = TestFileUtil.getPath() + "converterWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, ConverterData.class).sheet("模板").doWrite(data()); - } - - /** - * 图片导出 - *

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

- * 2. 直接写即可 - */ - @Test - public void imageWrite() throws Exception { - String fileName = TestFileUtil.getPath() + "imageWrite" + System.currentTimeMillis() + ".xlsx"; - - String imagePath = TestFileUtil.getPath() + "converter" + File.separator + "img.jpg"; - try (InputStream inputStream = FileUtils.openInputStream(new File(imagePath))) { - List list = ListUtils.newArrayList(); - ImageDemoData imageDemoData = new ImageDemoData(); - list.add(imageDemoData); - // 放入五种类型的图片 实际使用只要选一种即可 - imageDemoData.setByteArray(FileUtils.readFileToByteArray(new File(imagePath))); - imageDemoData.setFile(new File(imagePath)); - imageDemoData.setString(imagePath); - imageDemoData.setInputStream(inputStream); - imageDemoData.setUrl(new URL( - "https://raw.githubusercontent.com/alibaba/easyexcel/master/src/test/resources/converter/img.jpg")); - - // 这里演示 - // 需要额外放入文字 - // 而且需要放入2个图片 - // 第一个图片靠左 - // 第二个靠右 而且要额外的占用他后面的单元格 - WriteCellData writeCellData = new WriteCellData<>(); - imageDemoData.setWriteCellDataFile(writeCellData); - // 这里可以设置为 EMPTY 则代表不需要其他数据了 - writeCellData.setType(CellDataTypeEnum.STRING); - writeCellData.setStringValue("额外的放一些文字"); - - // 可以放入多个图片 - List imageDataList = new ArrayList<>(); - ImageData imageData = new ImageData(); - imageDataList.add(imageData); - writeCellData.setImageDataList(imageDataList); - // 放入2进制图片 - imageData.setImage(FileUtils.readFileToByteArray(new File(imagePath))); - // 图片类型 - imageData.setImageType(ImageType.PICTURE_TYPE_PNG); - // 上 右 下 左 需要留空 - // 这个类似于 css 的 margin - // 这里实测 不能设置太大 超过单元格原始大小后 打开会提示修复。暂时未找到很好的解法。 - imageData.setTop(5); - imageData.setRight(40); - imageData.setBottom(5); - imageData.setLeft(5); - - // 放入第二个图片 - imageData = new ImageData(); - imageDataList.add(imageData); - writeCellData.setImageDataList(imageDataList); - imageData.setImage(FileUtils.readFileToByteArray(new File(imagePath))); - imageData.setImageType(ImageType.PICTURE_TYPE_PNG); - imageData.setTop(5); - imageData.setRight(5); - imageData.setBottom(5); - imageData.setLeft(50); - // 设置图片的位置 假设 现在目标 是 覆盖 当前单元格 和当前单元格右边的单元格 - // 起点相对于当前单元格为0 当然可以不写 - imageData.setRelativeFirstRowIndex(0); - imageData.setRelativeFirstColumnIndex(0); - imageData.setRelativeLastRowIndex(0); - // 前面3个可以不写 下面这个需要写 也就是 结尾 需要相对当前单元格 往右移动一格 - // 也就是说 这个图片会覆盖当前单元格和 后面的那一格 - imageData.setRelativeLastColumnIndex(1); - - // 写入数据 - EasyExcel.write(fileName, ImageDemoData.class).sheet().doWrite(list); - } - } - - /** - * 超链接、备注、公式、指定单个单元格的样式、单个单元格多种样式 - *

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

- * 2. 直接写即可 - * - * @since 3.0.0-beta1 - */ - @Test - public void writeCellDataWrite() { - String fileName = TestFileUtil.getPath() + "writeCellDataWrite" + System.currentTimeMillis() + ".xlsx"; - WriteCellDemoData writeCellDemoData = new WriteCellDemoData(); - - // 设置超链接 - WriteCellData hyperlink = new WriteCellData<>("官方网站"); - writeCellDemoData.setHyperlink(hyperlink); - HyperlinkData hyperlinkData = new HyperlinkData(); - hyperlink.setHyperlinkData(hyperlinkData); - hyperlinkData.setAddress("https://github.com/alibaba/easyexcel"); - hyperlinkData.setHyperlinkType(HyperlinkType.URL); - - // 设置备注 - WriteCellData comment = new WriteCellData<>("备注的单元格信息"); - writeCellDemoData.setCommentData(comment); - CommentData commentData = new CommentData(); - comment.setCommentData(commentData); - commentData.setAuthor("Jiaju Zhuang"); - commentData.setRichTextStringData(new RichTextStringData("这是一个备注")); - // 备注的默认大小是按照单元格的大小 这里想调整到4个单元格那么大 所以向后 向下 各额外占用了一个单元格 - commentData.setRelativeLastColumnIndex(1); - commentData.setRelativeLastRowIndex(1); - - // 设置公式 - WriteCellData formula = new WriteCellData<>(); - writeCellDemoData.setFormulaData(formula); - FormulaData formulaData = new FormulaData(); - formula.setFormulaData(formulaData); - // 将 123456789 中的第一个数字替换成 2 - // 这里只是例子 如果真的涉及到公式 能内存算好尽量内存算好 公式能不用尽量不用 - formulaData.setFormulaValue("REPLACE(123456789,1,1,2)"); - - // 设置单个单元格的样式 当然样式 很多的话 也可以用注解等方式。 - WriteCellData writeCellStyle = new WriteCellData<>("单元格样式"); - writeCellStyle.setType(CellDataTypeEnum.STRING); - writeCellDemoData.setWriteCellStyle(writeCellStyle); - WriteCellStyle writeCellStyleData = new WriteCellStyle(); - writeCellStyle.setWriteCellStyle(writeCellStyleData); - // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色. - writeCellStyleData.setFillPatternType(FillPatternType.SOLID_FOREGROUND); - // 背景绿色 - writeCellStyleData.setFillForegroundColor(IndexedColors.GREEN.getIndex()); - - // 设置单个单元格多种样式 - WriteCellData richTest = new WriteCellData<>(); - richTest.setType(CellDataTypeEnum.RICH_TEXT_STRING); - writeCellDemoData.setRichText(richTest); - RichTextStringData richTextStringData = new RichTextStringData(); - richTest.setRichTextStringDataValue(richTextStringData); - richTextStringData.setTextString("红色绿色默认"); - // 前2个字红色 - WriteFont writeFont = new WriteFont(); - writeFont.setColor(IndexedColors.RED.getIndex()); - richTextStringData.applyFont(0, 2, writeFont); - // 接下来2个字绿色 - writeFont = new WriteFont(); - writeFont.setColor(IndexedColors.GREEN.getIndex()); - richTextStringData.applyFont(2, 4, writeFont); - - List data = new ArrayList<>(); - data.add(writeCellDemoData); - EasyExcel.write(fileName, WriteCellDemoData.class).inMemory(true).sheet("模板").doWrite(data); - } - - /** - * 根据模板写入 - *

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

- * 2. 使用{@link ExcelProperty}注解指定写入的列 - *

- * 3. 使用withTemplate 写取模板 - *

- * 4. 直接写即可 - */ - @Test - public void templateWrite() { - String templateFileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; - String fileName = TestFileUtil.getPath() + "templateWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, DemoData.class).withTemplate(templateFileName).sheet().doWrite(data()); - } - - /** - * 列宽、行高 - *

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

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

- * 3. 直接写即可 - */ - @Test - public void widthAndHeightWrite() { - String fileName = TestFileUtil.getPath() + "widthAndHeightWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, WidthAndHeightData.class).sheet("模板").doWrite(data()); - } - - /** - * 注解形式自定义样式 - *

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

- * 3. 直接写即可 - * - * @since 2.2.0-beta1 - */ - @Test - public void annotationStyleWrite() { - String fileName = TestFileUtil.getPath() + "annotationStyleWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, DemoStyleData.class).sheet("模板").doWrite(data()); - } - - /** - * 拦截器形式自定义样式 - *

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

- * 2. 创建一个style策略 并注册 - *

- * 3. 直接写即可 - */ - @Test - public void handlerStyleWrite() { - // 方法1 使用已有的策略 推荐 - // HorizontalCellStyleStrategy 每一行的样式都一样 或者隔行一样 - // AbstractVerticalCellStyleStrategy 每一列的样式都一样 需要自己回调每一页 - String fileName = TestFileUtil.getPath() + "handlerStyleWrite" + System.currentTimeMillis() + ".xlsx"; - // 头的策略 - WriteCellStyle headWriteCellStyle = new WriteCellStyle(); - // 背景设置为红色 - headWriteCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); - WriteFont headWriteFont = new WriteFont(); - headWriteFont.setFontHeightInPoints((short)20); - headWriteCellStyle.setWriteFont(headWriteFont); - // 内容的策略 - WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); - // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定 - contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); - // 背景绿色 - contentWriteCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex()); - WriteFont contentWriteFont = new WriteFont(); - // 字体大小 - contentWriteFont.setFontHeightInPoints((short)20); - contentWriteCellStyle.setWriteFont(contentWriteFont); - // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现 - HorizontalCellStyleStrategy horizontalCellStyleStrategy = - new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); - - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, DemoData.class) - .registerWriteHandler(horizontalCellStyleStrategy) - .sheet("模板") - .doWrite(data()); - - // 方法2: 使用easyexcel的方式完全自己写 不太推荐 尽量使用已有策略 - // @since 3.0.0-beta2 - fileName = TestFileUtil.getPath() + "handlerStyleWrite" + System.currentTimeMillis() + ".xlsx"; - EasyExcel.write(fileName, DemoData.class) - .registerWriteHandler(new CellWriteHandler() { - @Override - public void afterCellDispose(CellWriteHandlerContext context) { - // 当前事件会在 数据设置到poi的cell里面才会回调 - // 判断不是头的情况 如果是fill 的情况 这里会==null 所以用not true - if (BooleanUtils.isNotTrue(context.getHead())) { - // 第一个单元格 - // 只要不是头 一定会有数据 当然fill的情况 可能要context.getCellDataList() ,这个需要看模板,因为一个单元格会有多个 WriteCellData - WriteCellData cellData = context.getFirstCellData(); - // 这里需要去cellData 获取样式 - // 很重要的一个原因是 WriteCellStyle 和 dataFormatData绑定的 简单的说 比如你加了 DateTimeFormat - // ,已经将writeCellStyle里面的dataFormatData 改了 如果你自己new了一个WriteCellStyle,可能注解的样式就失效了 - // 然后 getOrCreateStyle 用于返回一个样式,如果为空,则创建一个后返回 - WriteCellStyle writeCellStyle = cellData.getOrCreateStyle(); - writeCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); - // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND - writeCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); - - // 这样样式就设置好了 后面有个FillStyleCellWriteHandler 默认会将 WriteCellStyle 设置到 cell里面去 所以可以不用管了 - } - } - }).sheet("模板") - .doWrite(data()); - - // 方法3: 使用poi的样式完全自己写 不推荐 - // @since 3.0.0-beta2 - // 坑1:style里面有dataformat 用来格式化数据的 所以自己设置可能导致格式化注解不生效 - // 坑2:不要一直去创建style 记得缓存起来 最多创建6W个就挂了 - fileName = TestFileUtil.getPath() + "handlerStyleWrite" + System.currentTimeMillis() + ".xlsx"; - EasyExcel.write(fileName, DemoData.class) - .registerWriteHandler(new CellWriteHandler() { - @Override - public void afterCellDispose(CellWriteHandlerContext context) { - // 当前事件会在 数据设置到poi的cell里面才会回调 - // 判断不是头的情况 如果是fill 的情况 这里会==null 所以用not true - if (BooleanUtils.isNotTrue(context.getHead())) { - Cell cell = context.getCell(); - // 拿到poi的workbook - Workbook workbook = context.getWriteWorkbookHolder().getWorkbook(); - // 这里千万记住 想办法能复用的地方把他缓存起来 一个表格最多创建6W个样式 - // 不同单元格尽量传同一个 cellStyle - CellStyle cellStyle = workbook.createCellStyle(); - cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); - // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND - cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); - cell.setCellStyle(cellStyle); - - // 由于这里没有指定dataformat 最后展示的数据 格式可能会不太正确 - - // 这里要把 WriteCellData的样式清空, 不然后面还有一个拦截器 FillStyleCellWriteHandler 默认会将 WriteCellStyle 设置到 - // cell里面去 会导致自己设置的不一样 - context.getFirstCellData().setWriteCellStyle(null); - } - } - }).sheet("模板") - .doWrite(data()); - } - - /** - * 合并单元格 - *

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

- * 2. 创建一个merge策略 并注册 - *

- * 3. 直接写即可 - * - * @since 2.2.0-beta1 - */ - @Test - public void mergeWrite() { - // 方法1 注解 - String fileName = TestFileUtil.getPath() + "mergeWrite" + System.currentTimeMillis() + ".xlsx"; - // 在DemoStyleData里面加上ContentLoopMerge注解 - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, DemoMergeData.class).sheet("模板").doWrite(data()); - - // 方法2 自定义合并单元格策略 - fileName = TestFileUtil.getPath() + "mergeWrite" + System.currentTimeMillis() + ".xlsx"; - // 每隔2行会合并 把eachColumn 设置成 3 也就是我们数据的长度,所以就第一列会合并。当然其他合并策略也可以自己写 - LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(2, 0); - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, DemoData.class).registerWriteHandler(loopMergeStrategy).sheet("模板").doWrite(data()); - } - - /** - * 使用table去写入 - *

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

- * 2. 然后写入table即可 - */ - @Test - public void tableWrite() { - String fileName = TestFileUtil.getPath() + "tableWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里直接写多个table的案例了,如果只有一个 也可以直一行代码搞定,参照其他案例 - // 这里 需要指定写用哪个class去写 - ExcelWriter excelWriter = null; - try { - excelWriter = EasyExcel.write(fileName, DemoData.class).build(); - // 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了 - WriteSheet writeSheet = EasyExcel.writerSheet("模板").needHead(Boolean.FALSE).build(); - // 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要 - WriteTable writeTable0 = EasyExcel.writerTable(0).needHead(Boolean.TRUE).build(); - WriteTable writeTable1 = EasyExcel.writerTable(1).needHead(Boolean.TRUE).build(); - // 第一次写入会创建头 - excelWriter.write(data(), writeSheet, writeTable0); - // 第二次写如也会创建头,然后在第一次的后面写入数据 - excelWriter.write(data(), writeSheet, writeTable1); - } finally { - // 千万别忘记finish 会帮忙关闭流 - if (excelWriter != null) { - excelWriter.finish(); - } - } - } - - /** - * 动态头,实时生成头写入 - *

- * 思路是这样子的,先创建List头格式的sheet仅仅写入头,然后通过table 不写入头的方式 去写入数据 - * - *

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

- * 2. 然后写入table即可 - */ - @Test - public void dynamicHeadWrite() { - String fileName = TestFileUtil.getPath() + "dynamicHeadWrite" + System.currentTimeMillis() + ".xlsx"; - EasyExcel.write(fileName) - // 这里放入动态头 - .head(head()).sheet("模板") - // 当然这里数据也可以用 List> 去传入 - .doWrite(data()); - } - - /** - * 自动列宽(不太精确) - *

- * 这个目前不是很好用,比如有数字就会导致换行。而且长度也不是刚好和实际长度一致。 所以需要精确到刚好列宽的慎用。 当然也可以自己参照 {@link LongestMatchColumnWidthStyleStrategy} - * 重新实现. - *

- * poi 自带{@link SXSSFSheet#autoSizeColumn(int)} 对中文支持也不太好。目前没找到很好的算法。 有的话可以推荐下。 - * - *

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

- * 2. 注册策略{@link LongestMatchColumnWidthStyleStrategy} - *

- * 3. 直接写即可 - */ - @Test - public void longestMatchColumnWidthWrite() { - String fileName = - TestFileUtil.getPath() + "longestMatchColumnWidthWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, LongestMatchColumnWidthData.class) - .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("模板").doWrite(dataLong()); - } - - /** - * 下拉,超链接等自定义拦截器(上面几点都不符合但是要对单元格进行操作的参照这个) - *

- * demo这里实现2点。1. 对第一行第一列的头超链接到:https://github.com/alibaba/easyexcel 2. 对第一列第一行和第二行的数据新增下拉框,显示 测试1 测试2 - *

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

- * 2. 注册拦截器 {@link CustomCellWriteHandler} {@link CustomSheetWriteHandler} - *

- * 2. 直接写即可 - */ - @Test - public void customHandlerWrite() { - String fileName = TestFileUtil.getPath() + "customHandlerWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, DemoData.class).registerWriteHandler(new CustomSheetWriteHandler()) - .registerWriteHandler(new CustomCellWriteHandler()).sheet("模板").doWrite(data()); - } - - /** - * 插入批注 - *

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

- * 2. 注册拦截器 {@link CommentWriteHandler} - *

- * 2. 直接写即可 - */ - @Test - public void commentWrite() { - String fileName = TestFileUtil.getPath() + "commentWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - // 这里要注意inMemory 要设置为true,才能支持批注。目前没有好的办法解决 不在内存处理批注。这个需要自己选择。 - EasyExcel.write(fileName, DemoData.class).inMemory(Boolean.TRUE).registerWriteHandler(new CommentWriteHandler()) - .sheet("模板").doWrite(data()); - } - - /** - * 可变标题处理(包括标题国际化等) - *

- * 简单的说用List>的标题 但是还支持注解 - *

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

- * 2. 直接写即可 - */ - @Test - public void variableTitleWrite() { - // 写法1 - String fileName = TestFileUtil.getPath() + "variableTitleWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName, ConverterData.class).head(variableTitleHead()).sheet("模板").doWrite(data()); - } - - /** - * 不创建对象的写 - */ - @Test - public void noModelWrite() { - // 写法1 - String fileName = TestFileUtil.getPath() + "noModelWrite" + System.currentTimeMillis() + ".xlsx"; - // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 - EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList()); - } - - private List dataLong() { - List list = ListUtils.newArrayList(); - for (int i = 0; i < 10; i++) { - LongestMatchColumnWidthData data = new LongestMatchColumnWidthData(); - data.setString("测试很长的字符串测试很长的字符串测试很长的字符串" + i); - data.setDate(new Date()); - data.setDoubleData(1000000000000.0); - list.add(data); - } - return list; - } - - private List> variableTitleHead() { - List> list = ListUtils.newArrayList(); - List head0 = ListUtils.newArrayList(); - head0.add("string" + System.currentTimeMillis()); - List head1 = ListUtils.newArrayList(); - head1.add("number" + System.currentTimeMillis()); - List head2 = ListUtils.newArrayList(); - head2.add("date" + System.currentTimeMillis()); - list.add(head0); - list.add(head1); - list.add(head2); - return list; - } - - private List> head() { - List> list = ListUtils.newArrayList(); - List head0 = ListUtils.newArrayList(); - head0.add("字符串" + System.currentTimeMillis()); - List head1 = ListUtils.newArrayList(); - head1.add("数字" + System.currentTimeMillis()); - List head2 = ListUtils.newArrayList(); - head2.add("日期" + System.currentTimeMillis()); - list.add(head0); - list.add(head1); - list.add(head2); - return list; - } - - private List> dataList() { - List> list = ListUtils.newArrayList(); - for (int i = 0; i < 10; i++) { - List data = ListUtils.newArrayList(); - data.add("字符串" + i); - data.add(new Date()); - data.add(0.56); - list.add(data); - } - return list; - } - - private List data() { - List list = ListUtils.newArrayList(); - for (int i = 0; i < 10; i++) { - DemoData data = new DemoData(); - data.setString("字符串" + i); - data.setDate(new Date()); - data.setDoubleData(0.56); - list.add(data); - } - return list; - } - -} diff --git a/update.md b/update.md index 30e9fd0e..f2bb7a64 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,20 @@ +# 3.1.0 +* 支持jdk17,去除cglib&asm依赖,改成重新拷贝一份 [Issue #2240](https://github.com/alibaba/easyexcel/issues/2240) +* 升级ehcache 到 3.9.9 ,为了兼容jdk17 +* 在有样式没有数据的情况下也算空行 [Issue #2294](https://github.com/alibaba/easyexcel/issues/2294) +* 修复无法根据文件流判断csv的bug [Issue #2297](https://github.com/alibaba/easyexcel/issues/2297) +* 修复CSV不关闭流的bug [Issue #2309](https://github.com/alibaba/easyexcel/issues/2309) +* 修复`filed`拼接错误 [Issue #2390](https://github.com/alibaba/easyexcel/issues/2390) +* 修复`BigIntegerStringConverter`无效的bug [Issue #2325](https://github.com/alibaba/easyexcel/issues/2325) +* 修复03版本无法读取到公式格式的bug [Issue #2444](https://github.com/alibaba/easyexcel/issues/2444) +* 提高类型转换兼容性 [Issue #2443](https://github.com/alibaba/easyexcel/issues/2443) +* 捕获`setFeature`异常不影响主流程 [Issue #2054](https://github.com/alibaba/easyexcel/issues/2054) +* 增加部分`xls`容错 [Issue #2236](https://github.com/alibaba/easyexcel/issues/2236) +* 修复读取csv文件时`autoTrim`配置失效 [Issue #2227](https://github.com/alibaba/easyexcel/issues/2227) +* csv支持设置读写编码 [Issue #2404](https://github.com/alibaba/easyexcel/issues/2404) +* 读写支持`try-with-resources`语法糖 + + # 3.0.5 * 修复`ReadListener` 转换异常不抛出的问题