diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index cc68ecf9..f4e30b60 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- java: [ 8, 11, 17]
+ java: [ 8, 11, 17, 21]
distribution: [ 'adopt' ]
fail-fast: false
max-parallel: 4
@@ -37,7 +37,7 @@ jobs:
java-version: ${{ matrix.java }}
distribution: ${{ matrix.distribution }}
- name: Cache local Maven repository
- uses: actions/cache@v3
+ uses: actions/cache@main
with:
path: ~/.m2/repository
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
@@ -46,7 +46,11 @@ jobs:
- name: Chmod
run: chmod +x mvnw
- name: Test with Maven
+ if: ${{ matrix.java == '8' }}
run: ./mvnw test -B -Dmaven.test.skip=false
+ - name: Test with Maven
+ if: ${{ matrix.java != '8' }}
+ run: ./mvnw test -B -Dmaven.test.skip=false -DargLine="--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/sun.reflect.annotation=ALL-UNNAMED"
- name: Maven Build
run: ./mvnw install -B -V
- name: Java Doc
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3051a057..d6bba390 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -37,7 +37,7 @@ jobs:
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Cache local Maven repository
- uses: actions/cache@v3
+ uses: actions/cache@main
with:
path: ~/.m2/repository
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
diff --git a/README.md b/README.md
index cc5c9352..789337c2 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,7 @@ easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析
com.alibaba
easyexcel
- 3.3.4
+ 4.0.1
```
diff --git a/easyexcel-core/pom.xml b/easyexcel-core/pom.xml
index 70c1e6fe..93d013cc 100644
--- a/easyexcel-core/pom.xml
+++ b/easyexcel-core/pom.xml
@@ -28,10 +28,6 @@
org.apache.poi
poi-ooxml
-
- org.apache.poi
- poi-ooxml-schemas
-
org.apache.commons
commons-csv
@@ -40,9 +36,5 @@
org.ehcache
ehcache
-
- commons-io
- commons-io
-
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
index a2bf163d..beda8503 100644
--- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v07/XlsxSaxAnalyser.java
@@ -33,7 +33,6 @@ import com.alibaba.excel.util.SheetUtils;
import com.alibaba.excel.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackageAccess;
@@ -43,10 +42,9 @@ import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
import org.apache.poi.ss.util.CellAddress;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
+import org.apache.poi.xssf.model.Comments;
import org.apache.poi.xssf.model.CommentsTable;
-import org.apache.poi.xssf.model.SharedStringsTable;
import org.apache.poi.xssf.usermodel.XSSFComment;
-import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbookPr;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.WorkbookDocument;
@@ -123,9 +121,9 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
sheetList.add(new ReadSheet(index, ite.getSheetName()));
sheetMap.put(index, inputStream);
if (xlsxReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.COMMENT)) {
- CommentsTable commentsTable = ite.getSheetComments();
- if (null != commentsTable) {
- commentsTableMap.put(index, commentsTable);
+ Comments comments = ite.getSheetComments();
+ if (comments instanceof CommentsTable) {
+ commentsTableMap.put(index, (CommentsTable) comments);
}
}
if (xlsxReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.HYPERLINK)) {
@@ -181,7 +179,7 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
}
private void analysisSharedStringsTable(InputStream sharedStringsTableInputStream,
- XlsxReadWorkbookHolder xlsxReadWorkbookHolder) throws Exception {
+ XlsxReadWorkbookHolder xlsxReadWorkbookHolder) {
ContentHandler handler = new SharedStringsTableHandler(xlsxReadWorkbookHolder.getReadCache());
parseXmlSource(sharedStringsTableInputStream, handler);
xlsxReadWorkbookHolder.getReadCache().putFinished();
@@ -201,7 +199,7 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
}
File readTempFile = FileUtils.createCacheTmpFile();
xlsxReadWorkbookHolder.setTempFile(readTempFile);
- File tempFile = new File(readTempFile.getPath(), UUID.randomUUID().toString() + ".xlsx");
+ File tempFile = new File(readTempFile.getPath(), UUID.randomUUID() + ".xlsx");
if (decryptedStream != null) {
FileUtils.writeToFile(tempFile, decryptedStream, false);
} else {
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCell.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCell.java
index 72beb30a..a75c5765 100644
--- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCell.java
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCell.java
@@ -227,11 +227,6 @@ public class CsvCell extends CellBase {
return getCellType();
}
- @Override
- public CellType getCachedFormulaResultTypeEnum() {
- return getCellType();
- }
-
@Override
public String getCellFormula() {
if (formulaData == null) {
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCellStyle.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCellStyle.java
index a992f213..7a2714a0 100644
--- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCellStyle.java
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvCellStyle.java
@@ -76,7 +76,7 @@ public class CsvCellStyle implements CellStyle {
}
@Override
- public short getFontIndex() {
+ public int getFontIndex() {
return 0;
}
@@ -125,11 +125,6 @@ public class CsvCellStyle implements CellStyle {
return null;
}
- @Override
- public HorizontalAlignment getAlignmentEnum() {
- return null;
- }
-
@Override
public void setWrapText(boolean wrapped) {
@@ -150,11 +145,6 @@ public class CsvCellStyle implements CellStyle {
return null;
}
- @Override
- public VerticalAlignment getVerticalAlignmentEnum() {
- return null;
- }
-
@Override
public void setRotation(short rotation) {
@@ -185,11 +175,6 @@ public class CsvCellStyle implements CellStyle {
return null;
}
- @Override
- public BorderStyle getBorderLeftEnum() {
- return null;
- }
-
@Override
public void setBorderRight(BorderStyle border) {
@@ -200,11 +185,6 @@ public class CsvCellStyle implements CellStyle {
return null;
}
- @Override
- public BorderStyle getBorderRightEnum() {
- return null;
- }
-
@Override
public void setBorderTop(BorderStyle border) {
@@ -215,11 +195,6 @@ public class CsvCellStyle implements CellStyle {
return null;
}
- @Override
- public BorderStyle getBorderTopEnum() {
- return null;
- }
-
@Override
public void setBorderBottom(BorderStyle border) {
@@ -230,11 +205,6 @@ public class CsvCellStyle implements CellStyle {
return null;
}
- @Override
- public BorderStyle getBorderBottomEnum() {
- return null;
- }
-
@Override
public void setLeftBorderColor(short color) {
@@ -286,12 +256,12 @@ public class CsvCellStyle implements CellStyle {
}
@Override
- public FillPatternType getFillPatternEnum() {
- return null;
+ public void setFillBackgroundColor(short bg) {
+
}
@Override
- public void setFillBackgroundColor(short bg) {
+ public void setFillBackgroundColor(Color color) {
}
@@ -310,6 +280,11 @@ public class CsvCellStyle implements CellStyle {
}
+ @Override
+ public void setFillForegroundColor(Color color) {
+
+ }
+
@Override
public short getFillForegroundColor() {
return 0;
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java
index f3f63156..6e3db62e 100644
--- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvSheet.java
@@ -34,6 +34,8 @@ import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Footer;
import org.apache.poi.ss.usermodel.Header;
import org.apache.poi.ss.usermodel.Hyperlink;
+import org.apache.poi.ss.usermodel.PageMargin;
+import org.apache.poi.ss.usermodel.PaneType;
import org.apache.poi.ss.usermodel.PrintSetup;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
@@ -406,11 +408,21 @@ public class CsvSheet implements Sheet, Closeable {
return 0;
}
+ @Override
+ public double getMargin(PageMargin pageMargin) {
+ return 0;
+ }
+
@Override
public void setMargin(short margin, double size) {
}
+ @Override
+ public void setMargin(PageMargin pageMargin, double v) {
+
+ }
+
@Override
public boolean getProtect() {
return false;
@@ -476,6 +488,11 @@ public class CsvSheet implements Sheet, Closeable {
}
+ @Override
+ public void createSplitPane(int i, int i1, int i2, int i3, PaneType paneType) {
+
+ }
+
@Override
public PaneInformation getPaneInformation() {
return null;
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java
index d2f0e08b..31724d99 100644
--- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/csv/CsvWorkbook.java
@@ -12,7 +12,9 @@ import lombok.Getter;
import lombok.Setter;
import org.apache.commons.compress.utils.Lists;
import org.apache.poi.ss.SpreadsheetVersion;
+import org.apache.poi.ss.formula.EvaluationWorkbook;
import org.apache.poi.ss.formula.udf.UDFFinder;
+import org.apache.poi.ss.usermodel.CellReferenceType;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.DataFormat;
@@ -40,10 +42,9 @@ public class CsvWorkbook implements Workbook {
/**
* true if date uses 1904 windowing, or false if using 1900 date windowing.
- *
+ *
* default is false
*
- * @return
*/
private Boolean use1904windowing;
@@ -54,7 +55,7 @@ public class CsvWorkbook implements Workbook {
/**
* Whether to use scientific Format.
- *
+ *
* default is false
*/
private Boolean useScientificFormat;
@@ -200,7 +201,7 @@ public class CsvWorkbook implements Workbook {
}
@Override
- public short getNumberOfFonts() {
+ public int getNumberOfFonts() {
return 0;
}
@@ -209,11 +210,6 @@ public class CsvWorkbook implements Workbook {
return 0;
}
- @Override
- public Font getFontAt(short idx) {
- return null;
- }
-
@Override
public Font getFontAt(int idx) {
return null;
@@ -272,31 +268,11 @@ public class CsvWorkbook implements Workbook {
return null;
}
- @Override
- public Name getNameAt(int nameIndex) {
- return null;
- }
-
@Override
public Name createName() {
return null;
}
- @Override
- public int getNameIndex(String name) {
- return 0;
- }
-
- @Override
- public void removeName(int index) {
-
- }
-
- @Override
- public void removeName(String name) {
-
- }
-
@Override
public void removeName(Name name) {
@@ -417,10 +393,25 @@ public class CsvWorkbook implements Workbook {
}
@Override
- public int addOlePackage(byte[] oleData, String label, String fileName, String command) throws IOException {
+ public int addOlePackage(byte[] oleData, String label, String fileName, String command) {
return 0;
}
+ @Override
+ public EvaluationWorkbook createEvaluationWorkbook() {
+ return null;
+ }
+
+ @Override
+ public CellReferenceType getCellReferenceType() {
+ return null;
+ }
+
+ @Override
+ public void setCellReferenceType(CellReferenceType cellReferenceType) {
+
+ }
+
@Override
public Iterator iterator() {
return null;
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java
index 5d3333c7..fab5a7c6 100644
--- a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java
@@ -4,7 +4,6 @@ import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Map;
-
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.enums.HeadKindEnum;
@@ -15,13 +14,13 @@ import com.alibaba.excel.metadata.data.DataFormatData;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.metadata.holder.ReadSheetHolder;
import com.alibaba.excel.read.metadata.property.ExcelReadHeadProperty;
+import com.alibaba.excel.support.cglib.beans.BeanMap;
import com.alibaba.excel.util.BeanMapUtils;
import com.alibaba.excel.util.ClassUtils;
import com.alibaba.excel.util.ConverterUtils;
import com.alibaba.excel.util.DateUtils;
import com.alibaba.excel.util.MapUtils;
-import org.springframework.cglib.beans.BeanMap;
/**
* Convert to the object the user needs
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/BeanMapUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/BeanMapUtils.java
index 30b2c692..29926aa0 100644
--- a/easyexcel-core/src/main/java/com/alibaba/excel/util/BeanMapUtils.java
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/BeanMapUtils.java
@@ -1,7 +1,7 @@
package com.alibaba.excel.util;
-import org.springframework.cglib.beans.BeanMap;
-import org.springframework.cglib.core.DefaultNamingPolicy;
+import com.alibaba.excel.support.cglib.beans.BeanMap;
+import com.alibaba.excel.support.cglib.core.DefaultNamingPolicy;
/**
* bean utils
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java
index f9a53e08..3f3e14a0 100644
--- a/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/ClassUtils.java
@@ -33,6 +33,7 @@ import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.alibaba.excel.metadata.property.FontProperty;
import com.alibaba.excel.metadata.property.NumberFormatProperty;
import com.alibaba.excel.metadata.property.StyleProperty;
+import com.alibaba.excel.support.cglib.beans.BeanMap;
import com.alibaba.excel.write.metadata.holder.WriteHolder;
import lombok.AllArgsConstructor;
@@ -41,7 +42,6 @@ import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.cglib.beans.BeanMap;
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/EasyExcelTempFileCreationStrategy.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/EasyExcelTempFileCreationStrategy.java
new file mode 100644
index 00000000..ce4db733
--- /dev/null
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/EasyExcelTempFileCreationStrategy.java
@@ -0,0 +1,136 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package com.alibaba.excel.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.FileAttribute;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.apache.poi.util.DefaultTempFileCreationStrategy;
+import org.apache.poi.util.TempFileCreationStrategy;
+
+import static org.apache.poi.util.TempFile.JAVA_IO_TMPDIR;
+
+/**
+ * In the scenario where `poifiles` are cleaned up, the {@link DefaultTempFileCreationStrategy} will throw a
+ * java.nio.file.NoSuchFileException. Therefore, it is necessary to verify the existence of the temporary file every
+ * time it is created.
+ *
+ * @author Jiaju Zhuang
+ */
+public class EasyExcelTempFileCreationStrategy implements TempFileCreationStrategy {
+ /**
+ * Name of POI files directory in temporary directory.
+ */
+ public static final String POIFILES = "poifiles";
+
+ /**
+ * To use files.deleteOnExit after clean JVM exit, set the -Dpoi.delete.tmp.files.on.exit
JVM property
+ */
+ public static final String DELETE_FILES_ON_EXIT = "poi.delete.tmp.files.on.exit";
+
+ /**
+ * The directory where the temporary files will be created (null
to use the default directory).
+ */
+ private volatile File dir;
+
+ /**
+ * The lock to make dir initialized only once.
+ */
+ private final Lock dirLock = new ReentrantLock();
+
+ /**
+ * Creates the strategy so that it creates the temporary files in the default directory.
+ *
+ * @see File#createTempFile(String, String)
+ */
+ public EasyExcelTempFileCreationStrategy() {
+ this(null);
+ }
+
+ /**
+ * Creates the strategy allowing to set the
+ *
+ * @param dir The directory where the temporary files will be created (null
to use the default
+ * directory).
+ * @see Files#createTempFile(Path, String, String, FileAttribute[])
+ */
+ public EasyExcelTempFileCreationStrategy(File dir) {
+ this.dir = dir;
+ }
+
+ private void createPOIFilesDirectory() throws IOException {
+ // Create our temp dir only once by double-checked locking
+ // The directory is not deleted, even if it was created by this TempFileCreationStrategy
+ if (dir == null || !dir.exists()) {
+ dirLock.lock();
+ try {
+ if (dir == null || !dir.exists()) {
+ String tmpDir = System.getProperty(JAVA_IO_TMPDIR);
+ if (tmpDir == null) {
+ throw new IOException("System's temporary directory not defined - set the -D" + JAVA_IO_TMPDIR
+ + " jvm property!");
+ }
+ Path dirPath = Paths.get(tmpDir, POIFILES);
+ dir = Files.createDirectories(dirPath).toFile();
+ }
+ } finally {
+ dirLock.unlock();
+ }
+ return;
+ }
+ }
+
+ @Override
+ public File createTempFile(String prefix, String suffix) throws IOException {
+ // Identify and create our temp dir, if needed
+ createPOIFilesDirectory();
+
+ // Generate a unique new filename
+ File newFile = Files.createTempFile(dir.toPath(), prefix, suffix).toFile();
+
+ // Set the delete on exit flag, but only when explicitly disabled
+ if (System.getProperty(DELETE_FILES_ON_EXIT) != null) {
+ newFile.deleteOnExit();
+ }
+
+ // All done
+ return newFile;
+ }
+
+ /* (non-JavaDoc) Created directory path is /poifiles/prefix0123456789 */
+ @Override
+ public File createTempDirectory(String prefix) throws IOException {
+ // Identify and create our temp dir, if needed
+ createPOIFilesDirectory();
+
+ // Generate a unique new filename
+ File newDirectory = Files.createTempDirectory(dir.toPath(), prefix).toFile();
+
+ //this method appears to be only used in tests, so it is probably ok to use deleteOnExit
+ newDirectory.deleteOnExit();
+
+ // All done
+ return newDirectory;
+ }
+}
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/FieldUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/FieldUtils.java
index 42cc3e4a..2d5647ca 100644
--- a/easyexcel-core/src/main/java/com/alibaba/excel/util/FieldUtils.java
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/FieldUtils.java
@@ -5,8 +5,7 @@ import java.lang.reflect.Modifier;
import java.util.Map;
import com.alibaba.excel.metadata.NullObject;
-
-import org.springframework.cglib.beans.BeanMap;
+import com.alibaba.excel.support.cglib.beans.BeanMap;
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/util/FileUtils.java b/easyexcel-core/src/main/java/com/alibaba/excel/util/FileUtils.java
index d800be51..f514f6f7 100644
--- a/easyexcel-core/src/main/java/com/alibaba/excel/util/FileUtils.java
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/util/FileUtils.java
@@ -12,7 +12,6 @@ import java.util.UUID;
import com.alibaba.excel.exception.ExcelAnalysisException;
import com.alibaba.excel.exception.ExcelCommonException;
-import org.apache.poi.util.DefaultTempFileCreationStrategy;
import org.apache.poi.util.TempFile;
/**
@@ -111,7 +110,7 @@ public class FileUtils {
/**
* Write inputStream to file
*
- * @param file file
+ * @param file file
* @param inputStream inputStream
*/
public static void writeToFile(File file, InputStream inputStream) {
@@ -121,8 +120,8 @@ public class FileUtils {
/**
* Write inputStream to file
*
- * @param file file
- * @param inputStream inputStream
+ * @param file file
+ * @param inputStream inputStream
* @param closeInputStream closeInputStream
*/
public static void writeToFile(File file, InputStream inputStream, boolean closeInputStream) {
@@ -154,11 +153,8 @@ public class FileUtils {
}
}
-
public static void createPoiFilesDirectory() {
- File poiFilesPathFile = new File(poiFilesPath);
- createDirectory(poiFilesPathFile);
- TempFile.setTempFileCreationStrategy(new DefaultTempFileCreationStrategy(poiFilesPathFile));
+ TempFile.setTempFileCreationStrategy(new EasyExcelTempFileCreationStrategy());
}
public static File createCacheTmpFile() {
@@ -171,7 +167,6 @@ public class FileUtils {
}
/**
- *
* @param directory
*/
public static File createDirectory(File directory) {
diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteAddExecutor.java b/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteAddExecutor.java
index 2bdd713f..d1d82cc2 100644
--- a/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteAddExecutor.java
+++ b/easyexcel-core/src/main/java/com/alibaba/excel/write/executor/ExcelWriteAddExecutor.java
@@ -1,12 +1,10 @@
package com.alibaba.excel.write.executor;
-import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import java.util.TreeMap;
import com.alibaba.excel.context.WriteContext;
import com.alibaba.excel.enums.HeadKindEnum;
@@ -14,6 +12,7 @@ import com.alibaba.excel.metadata.FieldCache;
import com.alibaba.excel.metadata.FieldWrapper;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.alibaba.excel.support.cglib.beans.BeanMap;
import com.alibaba.excel.util.BeanMapUtils;
import com.alibaba.excel.util.ClassUtils;
import com.alibaba.excel.util.FieldUtils;
@@ -30,7 +29,6 @@ import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
-import org.springframework.cglib.beans.BeanMap;
/**
* Add the data into excel
diff --git a/easyexcel-support/pom.xml b/easyexcel-support/pom.xml
index 20e7c937..f07d0446 100644
--- a/easyexcel-support/pom.xml
+++ b/easyexcel-support/pom.xml
@@ -21,11 +21,11 @@
org.springframework
spring-core
- 5.3.27
+ 5.3.37
- org.springframework
- spring-jcl
+ *
+ *
@@ -49,7 +49,7 @@
true
true
-
+
org.springframework:spring-core
@@ -63,6 +63,12 @@
+
+
+ org.springframework
+ com.alibaba.excel.support
+
+
diff --git a/easyexcel-test/pom.xml b/easyexcel-test/pom.xml
index 94256f36..8c540b22 100644
--- a/easyexcel-test/pom.xml
+++ b/easyexcel-test/pom.xml
@@ -21,6 +21,7 @@
+
com.alibaba
easyexcel-core
@@ -28,17 +29,17 @@
com.alibaba.fastjson2
fastjson2
- 2.0.29
+ 2.0.51
org.springframework.boot
spring-boot-starter-web
- 2.7.11
+ 2.7.18
org.springframework.boot
spring-boot-starter-test
- 2.7.11
+ 2.7.18
@@ -60,7 +61,7 @@
ch.qos.logback
logback-classic
- 1.2.12
+ 1.5.6
@@ -73,7 +74,7 @@
/com/alibaba/easyexcel/test/core/**/*.java
- true
+ false
diff --git a/easyexcel-test/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
index 5958161c..31cdd85d 100644
--- a/easyexcel-test/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
@@ -13,6 +13,7 @@ import lombok.Setter;
public class DateFormatData {
private String date;
private String dateStringCn;
+ private String dateStringCn2;
private String dateStringUs;
private String number;
private String numberStringCn;
diff --git a/easyexcel-test/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
index 43a00fae..1229b238 100644
--- a/easyexcel-test/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
@@ -3,6 +3,7 @@ package com.alibaba.easyexcel.test.core.dataformat;
import java.io.File;
import java.util.List;
import java.util.Locale;
+import java.util.Objects;
import com.alibaba.easyexcel.test.util.TestFileUtil;
import com.alibaba.excel.EasyExcel;
@@ -46,15 +47,22 @@ public class DateFormatTest {
List list =
EasyExcel.read(file, DateFormatData.class, null).locale(Locale.CHINA).sheet().doReadSync();
for (DateFormatData data : list) {
- if (data.getDateStringCn() != null && !data.getDateStringCn().equals(data.getDate())) {
- log.info("date:cn:{},{}", data.getDateStringCn(), data.getDate());
+ if (!Objects.equals(data.getDateStringCn(), data.getDate()) && !Objects.equals(data.getDateStringCn2(),
+ data.getDate())) {
+ log.info("date:cn:{},{},{}", data.getDateStringCn(), data.getDateStringCn2(), data.getDate());
}
if (data.getNumberStringCn() != null && !data.getNumberStringCn().equals(data.getNumber())) {
log.info("number:cn{},{}", data.getNumberStringCn(), data.getNumber());
}
}
for (DateFormatData data : list) {
- Assertions.assertEquals(data.getDateStringCn(), data.getDate());
+ // The way dates are read in Chinese is different on Linux and Mac, so it is acceptable if it matches
+ // either one.
+ // For example, on Linux: 1-Jan -> 1-1月
+ // On Mac: 1-Jan -> 1-一月
+ Assertions.assertTrue(
+ Objects.equals(data.getDateStringCn(), data.getDate()) || Objects.equals(data.getDateStringCn2(),
+ data.getDate()));
Assertions.assertEquals(data.getNumberStringCn(), data.getNumber());
}
}
diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java
index eba2453b..db1ead44 100644
--- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java
+++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java
@@ -26,7 +26,7 @@ import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
-import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.ss.util.CellReference;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java
index 509dc57e..29ac81b4 100644
--- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java
+++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/StyleTest.java
@@ -10,7 +10,6 @@ import java.util.List;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson2.JSON;
-import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -180,7 +179,7 @@ public class StyleTest {
private void isDate(Cell cell) {
System.out.println(
DateUtil.isADateFormat(cell.getCellStyle().getDataFormat(), cell.getCellStyle().getDataFormatString()));
- System.out.println(HSSFDateUtil.isCellDateFormatted(cell));
+ //System.out.println(HSSFDateUtil.isCellDateFormatted(cell));
DataFormatter f = new DataFormatter();
System.out.println(f.formatCellValue(cell));
diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java
index ed5b2385..5e83405d 100644
--- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java
+++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/WriteV33Test.java
@@ -1,5 +1,8 @@
package com.alibaba.easyexcel.test.temp;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -135,4 +138,11 @@ public class WriteV33Test {
return list;
}
+
+ @Test
+ public void test4() throws Exception{
+ Path path= Files.createTempFile(new File("/Users/zhuangjiaju/test/test0422/test/xx").toPath(),System.currentTimeMillis()+"",".jpg");
+ System.out.println(path);
+ }
+
}
diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java
index 7d5a4490..a43525ae 100644
--- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java
+++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/Xls03Test.java
@@ -3,14 +3,14 @@ package com.alibaba.easyexcel.test.temp;
import java.util.List;
import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.cglib.beans.BeanMap;
+import com.alibaba.excel.support.cglib.core.DebuggingClassWriter;
import com.alibaba.excel.util.BeanMapUtils;
import com.alibaba.fastjson2.JSON;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.cglib.beans.BeanMap;
-import org.springframework.cglib.core.DebuggingClassWriter;
/**
* 临时测试
diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatter1.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatter1.java
index 6af972ef..bb143e85 100644
--- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatter1.java
+++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/dataformat/DataFormatter1.java
@@ -38,6 +38,7 @@ import java.util.Observer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import com.alibaba.excel.analysis.ExcelAnalyserImpl;
import org.apache.poi.ss.format.CellFormat;
import org.apache.poi.ss.format.CellFormatResult;
import org.apache.poi.ss.formula.ConditionalFormattingEvaluator;
@@ -54,8 +55,8 @@ import org.apache.poi.ss.usermodel.FractionFormat;
import org.apache.poi.ss.util.DateFormatConverter;
import org.apache.poi.ss.util.NumberToTextConverter;
import org.apache.poi.util.LocaleUtil;
-import org.apache.poi.util.POILogFactory;
-import org.apache.poi.util.POILogger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* DataFormatter contains methods for formatting the value stored in an Cell. This can be useful for reports and GUI
@@ -245,7 +246,7 @@ public class DataFormatter1 implements Observer {
/**
* For logging any problems we find
*/
- private static POILogger logger = POILogFactory.getLogger(DataFormatter.class);
+ private static final Logger logger = LoggerFactory.getLogger(ExcelAnalyserImpl.class);
/**
* Creates a formatter using the {@link Locale#getDefault() default locale}.
@@ -358,7 +359,7 @@ public class DataFormatter1 implements Observer {
// Wrap and return (non-cachable - CellFormat does that)
return new CellFormatResultWrapper(cfmt.apply(cellValueO));
} catch (Exception e) {
- logger.log(POILogger.WARN, "Formatting failed for format " + formatStr + ", falling back", e);
+ logger.warn("Formatting failed for format {}, falling back", formatStr, e);
}
}
@@ -598,7 +599,7 @@ public class DataFormatter1 implements Observer {
try {
return new ExcelStyleDateFormatter(formatStr, dateSymbols);
} catch (IllegalArgumentException iae) {
- logger.log(POILogger.DEBUG, "Formatting failed for format " + formatStr + ", falling back", iae);
+ logger.debug("Formatting failed for format {}, falling back", formatStr, iae);
// the pattern could not be parsed correctly,
// so fall back to the default number format
return getDefaultFormat(cellValue);
@@ -759,7 +760,7 @@ public class DataFormatter1 implements Observer {
try {
return new InternalDecimalFormatWithScale(format, symbols);
} catch (IllegalArgumentException iae) {
- logger.log(POILogger.DEBUG, "Formatting failed for format " + formatStr + ", falling back", iae);
+ logger.debug("Formatting failed for format {}, falling back", formatStr, iae);
// the pattern could not be parsed correctly,
// so fall back to the default number format
return getDefaultFormat(cellValue);
diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/TempLargeDataTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/TempLargeDataTest.java
index b88bf06e..246656c1 100644
--- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/TempLargeDataTest.java
+++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/large/TempLargeDataTest.java
@@ -8,7 +8,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
-import com.alibaba.easyexcel.test.core.large.LargeDataTest;
import com.alibaba.easyexcel.test.util.TestFileUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
@@ -31,7 +30,7 @@ import org.slf4j.LoggerFactory;
public class TempLargeDataTest {
- private static final Logger LOGGER = LoggerFactory.getLogger(LargeDataTest.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(TempLargeDataTest.class);
private int i = 0;
private static File fileFill07;
diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteTest.java
index 8c75deab..9f66a507 100644
--- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteTest.java
+++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/write/TempWriteTest.java
@@ -8,6 +8,7 @@ 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.support.cglib.beans.BeanMap;
import com.alibaba.excel.util.BeanMapUtils;
import com.alibaba.excel.util.FileUtils;
import com.alibaba.excel.util.ListUtils;
@@ -24,7 +25,6 @@ import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.jupiter.api.Test;
-import org.springframework.cglib.beans.BeanMap;
@Slf4j
public class TempWriteTest {
diff --git a/easyexcel-test/src/test/resources/dataformat/dataformat.xls b/easyexcel-test/src/test/resources/dataformat/dataformat.xls
index c8afd646..95c306ce 100644
Binary files a/easyexcel-test/src/test/resources/dataformat/dataformat.xls and b/easyexcel-test/src/test/resources/dataformat/dataformat.xls differ
diff --git a/easyexcel-test/src/test/resources/dataformat/dataformat.xlsx b/easyexcel-test/src/test/resources/dataformat/dataformat.xlsx
index f77dd9fd..34a05cc9 100644
Binary files a/easyexcel-test/src/test/resources/dataformat/dataformat.xlsx and b/easyexcel-test/src/test/resources/dataformat/dataformat.xlsx differ
diff --git a/pom.xml b/pom.xml
index 358a2846..44dd0796 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
- 3.3.4
+ 4.0.1
UTF-8
1.8
true
@@ -90,48 +90,40 @@
com.alibaba
easyexcel-support
- ${revision}
+ 3.3.4
org.apache.poi
poi
- 4.1.2
+ 5.2.5
org.apache.poi
poi-ooxml
- 4.1.2
-
-
- org.apache.poi
- poi-ooxml-schemas
- 4.1.2
+ 5.2.5
org.apache.commons
commons-csv
- 1.8
-
-
- org.slf4j
- slf4j-api
- 1.7.32
+ 1.11.0
org.ehcache
ehcache
- 3.9.9
+ 3.9.11
- org.projectlombok
- lombok
- 1.18.20
+ org.slf4j
+ slf4j-api
+ 1.7.36
+
+
- commons-io
- commons-io
- 2.11.0
+ org.projectlombok
+ lombok
+ 1.18.32
@@ -193,12 +185,12 @@
org.apache.maven.plugins
maven-surefire-plugin
- 2.22.2
+ 3.3.0
org.apache.maven.plugins
maven-shade-plugin
- 3.2.4
+ 3.6.0
org.codehaus.mojo
@@ -238,11 +230,13 @@
com/alibaba/excel/metadata/DataFormatter.java
com/alibaba/excel/util/DateUtils.java
com/alibaba/excel/util/MapUtils.java
+ com/alibaba/excel/util/EasyExcelTempFileCreationStrategy.java
com/alibaba/excel/metadata/format/DataFormatter.java
com/alibaba/excel/metadata/format/ExcelGeneralNumberFormat.java
com/alibaba/excel/metadata/csv/CsvDataFormat.java
com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java
com/alibaba/excel/analysis/v07/handlers/sax/SharedStringsTableHandler.java
+ com/alibaba/excel/write/executor/ExcelWriteFillExecutor.java
@@ -321,31 +315,6 @@
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
- package
-
- shade
-
-
-
-
- ${project.groupId}:${project.artifactId}
-
-
-
-
- org.springframework
- com.alibaba.excel.support
-
-
-
-
-
-
org.codehaus.mojo
diff --git a/update.md b/update.md
index a8f95564..6b141fff 100644
--- a/update.md
+++ b/update.md
@@ -1,3 +1,16 @@
+# 4.0.1
+
+* `commons-io` 修改为依赖 `poi`的版本
+* 修复临时目录被清理可能提示`NoSuchFileException`的异常
+
+# 4.0.0
+
+* `poi`由`4.1.2`升级到`5.2.5`
+* `commons-csv`由`1.1.0`升级到`1.10.0`
+* `slf4j-api`由`1.7.32`升级到`1.7.36`
+* `ehcache`由`3.9.9`升级到`3.9.11`
+* 支持`jdk21`
+
# 3.3.4
* 支持停止单个`sheet`以后继续读取其他`sheet`,使用`ExcelAnalysisStopSheetException`