diff --git a/README.md b/README.md
index 4fa394fb..ebba173e 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@ Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都
com.alibaba
easyexcel
- 3.0.2
+ 3.0.3
```
diff --git a/pom.xml b/pom.xml
index 00bae497..c5aec18c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.alibaba
easyexcel
- 3.0.2
+ 3.0.3
jar
easyexcel
diff --git a/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java b/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java
index a459818d..c692bf10 100644
--- a/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java
+++ b/src/main/java/com/alibaba/excel/read/listener/PageReadListener.java
@@ -6,6 +6,8 @@ import java.util.function.Consumer;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.util.ListUtils;
+import org.apache.commons.collections4.CollectionUtils;
+
/**
* page read listener
*
@@ -15,7 +17,7 @@ public class PageReadListener implements ReadListener {
/**
* Single handle the amount of data
*/
- public static final int BATCH_COUNT = 3000;
+ public static int BATCH_COUNT = 3000;
/**
* Temporary storage of data
*/
@@ -34,14 +36,15 @@ public class PageReadListener implements ReadListener {
cachedData.add(data);
if (cachedData.size() >= BATCH_COUNT) {
consumer.accept(cachedData);
- // 存储完成清理 list
cachedData = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
- consumer.accept(cachedData);
+ if (CollectionUtils.isNotEmpty(cachedData)) {
+ consumer.accept(cachedData);
+ }
}
}
diff --git a/src/main/java/com/alibaba/excel/util/BooleanUtils.java b/src/main/java/com/alibaba/excel/util/BooleanUtils.java
index 18f6dd39..c01ab24b 100644
--- a/src/main/java/com/alibaba/excel/util/BooleanUtils.java
+++ b/src/main/java/com/alibaba/excel/util/BooleanUtils.java
@@ -1,9 +1,20 @@
package com.alibaba.excel.util;
/**
- * boolean util
+ * 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
*
- * @author Jiaju Zhuang
+ * 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.
+ *
+ * @author Apache Software Foundation (ASF)
*/
public class BooleanUtils {
diff --git a/src/main/java/com/alibaba/excel/util/ClassUtils.java b/src/main/java/com/alibaba/excel/util/ClassUtils.java
index 82f78af2..f79dfdcc 100644
--- a/src/main/java/com/alibaba/excel/util/ClassUtils.java
+++ b/src/main/java/com/alibaba/excel/util/ClassUtils.java
@@ -38,10 +38,21 @@ import lombok.Setter;
import net.sf.cglib.beans.BeanMap;
/**
- * Class utils
+ * 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
*
- * @author Jiaju Zhuang
- **/
+ * 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.
+ *
+ * @author Apache Software Foundation (ASF)
+ */
public class ClassUtils {
public static final Map, FieldCache> FIELD_CACHE = new ConcurrentHashMap<>();
diff --git a/src/main/java/com/alibaba/excel/util/FieldUtils.java b/src/main/java/com/alibaba/excel/util/FieldUtils.java
index 367c6e55..0a825a7b 100644
--- a/src/main/java/com/alibaba/excel/util/FieldUtils.java
+++ b/src/main/java/com/alibaba/excel/util/FieldUtils.java
@@ -9,10 +9,21 @@ import com.alibaba.excel.metadata.NullObject;
import net.sf.cglib.beans.BeanMap;
/**
- * Field utils
+ * 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
*
- * @author Jiaju Zhuang
- **/
+ * 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.
+ *
+ * @author Apache Software Foundation (ASF)
+ */
public class FieldUtils {
public static Class> nullObjectClass = NullObject.class;
diff --git a/src/main/java/com/alibaba/excel/util/FileUtils.java b/src/main/java/com/alibaba/excel/util/FileUtils.java
index bc6b5d8a..41a4be0e 100644
--- a/src/main/java/com/alibaba/excel/util/FileUtils.java
+++ b/src/main/java/com/alibaba/excel/util/FileUtils.java
@@ -16,8 +16,20 @@ import org.apache.poi.util.DefaultTempFileCreationStrategy;
import org.apache.poi.util.TempFile;
/**
+ * 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
*
- * @author jipengfei
+ * 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.
+ *
+ * @author Apache Software Foundation (ASF)
*/
public class FileUtils {
public static final String POI_FILES = "poifiles";
diff --git a/src/main/java/com/alibaba/excel/util/MemberUtils.java b/src/main/java/com/alibaba/excel/util/MemberUtils.java
index 6bcfaac6..ea639f90 100644
--- a/src/main/java/com/alibaba/excel/util/MemberUtils.java
+++ b/src/main/java/com/alibaba/excel/util/MemberUtils.java
@@ -5,9 +5,20 @@ import java.lang.reflect.Member;
import java.lang.reflect.Modifier;
/**
- * Member utils.
+ * 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
*
- * @author Jiaju Zhuang
+ * 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.
+ *
+ * @author Apache Software Foundation (ASF)
*/
public class MemberUtils {
diff --git a/src/main/java/com/alibaba/excel/util/Validate.java b/src/main/java/com/alibaba/excel/util/Validate.java
index 6207bb1a..d407fc12 100644
--- a/src/main/java/com/alibaba/excel/util/Validate.java
+++ b/src/main/java/com/alibaba/excel/util/Validate.java
@@ -3,9 +3,20 @@ package com.alibaba.excel.util;
import java.util.Objects;
/**
- * Validate
+ * 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
*
- * @author Jiaju Zhuang
+ * 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.
+ *
+ * @author Apache Software Foundation (ASF)
*/
public class Validate {
diff --git a/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java b/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java
index 0b546703..016191ae 100644
--- a/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java
+++ b/src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java
@@ -273,9 +273,11 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
@Override
protected WriteCellStyle headCellStyle(CellWriteHandlerContext context) {
- ExcelContentProperty excelContentProperty = context.getExcelContentProperty();
- return WriteCellStyle.build(excelContentProperty.getContentStyleProperty(),
- excelContentProperty.getContentFontProperty());
+ Head head = context.getHeadData();
+ if (head == null) {
+ return null;
+ }
+ return WriteCellStyle.build(head.getHeadStyleProperty(), head.getHeadFontProperty());
}
@Override
diff --git a/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataTest.java b/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataTest.java
index 02bd3159..3523d453 100644
--- a/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataTest.java
+++ b/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationDataTest.java
@@ -4,31 +4,40 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
+import com.alibaba.easyexcel.test.core.StyleTestUtils;
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.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 AnnotationDataTest {
private static File file07;
private static File file03;
private static File fileCsv;
+ private static File fileStyle07;
+ private static File fileStyle03;
@BeforeClass
public static void init() {
file07 = TestFileUtil.createNewFile("annotation07.xlsx");
file03 = TestFileUtil.createNewFile("annotation03.xls");
+ fileStyle07 = TestFileUtil.createNewFile("annotationStyle07.xlsx");
+ fileStyle03 = TestFileUtil.createNewFile("annotationStyle03.xls");
fileCsv = TestFileUtil.createNewFile("annotationCsv.csv");
}
@@ -47,10 +56,46 @@ public class AnnotationDataTest {
readAndWrite(fileCsv);
}
+ @Test
+ public void t11WriteStyle07() throws Exception {
+ writeStyle(fileStyle07);
+ }
+
+ @Test
+ public void t12Write03() throws Exception {
+ writeStyle(fileStyle03);
+ }
+
+ private void writeStyle(File file) throws Exception {
+ EasyExcel.write().file(file).head(AnnotationStyleData.class).sheet().doWrite(dataStyle());
+
+ Workbook workbook = WorkbookFactory.create(file);
+ Sheet sheet = workbook.getSheetAt(0);
+
+ Row row0 = sheet.getRow(0);
+ Cell cell00 = row0.getCell(0);
+ Assert.assertArrayEquals(new byte[] {-1, 0, -1}, StyleTestUtils.getFillForegroundColor(cell00));
+ Assert.assertArrayEquals(new byte[] {-1, -52, 0}, StyleTestUtils.getFontColor(cell00, workbook));
+ Assert.assertEquals(40, StyleTestUtils.getFontHeightInPoints(cell00, workbook));
+
+ Cell cell01 = row0.getCell(1);
+ Assert.assertArrayEquals(new byte[] {-1, 0, 0}, StyleTestUtils.getFillForegroundColor(cell01));
+ Assert.assertArrayEquals(new byte[] {0, -1, -1}, StyleTestUtils.getFontColor(cell01, workbook));
+ Assert.assertEquals(20, StyleTestUtils.getFontHeightInPoints(cell01, workbook));
+
+ Row row1 = sheet.getRow(1);
+ Cell cell10 = row1.getCell(0);
+ Assert.assertArrayEquals(new byte[] {0, -52, -1}, StyleTestUtils.getFillForegroundColor(cell10));
+ Assert.assertArrayEquals(new byte[] {0, 0, -1}, StyleTestUtils.getFontColor(cell10, workbook));
+ Assert.assertEquals(50, StyleTestUtils.getFontHeightInPoints(cell10, workbook));
+ Cell cell11 = row1.getCell(1);
+ Assert.assertArrayEquals(new byte[] {0, -128, 0}, StyleTestUtils.getFillForegroundColor(cell11));
+ Assert.assertArrayEquals(new byte[] {-64, -64, -64}, StyleTestUtils.getFontColor(cell11, workbook));
+ Assert.assertEquals(30, StyleTestUtils.getFontHeightInPoints(cell11, workbook));
+ }
+
private void readAndWrite(File file) throws Exception {
- EasyExcel.write().file(file).head(AnnotationData.class).sheet().doWrite(data());
- EasyExcel.read().file(file).head(AnnotationData.class).registerReadListener(new AnnotationDataListener())
- .sheet().doRead();
+ EasyExcel.write().file(file).head(AnnotationData.class).sheet().doWrite(dataStyle());
if (file == fileCsv) {
return;
@@ -67,6 +112,15 @@ public class AnnotationDataTest {
Assert.assertEquals(2000, row1.getHeight(), 0);
}
+ private List dataStyle() throws Exception {
+ List list = new ArrayList<>();
+ AnnotationStyleData data = new AnnotationStyleData();
+ data.setString("string");
+ data.setString1("string1");
+ list.add(data);
+ return list;
+ }
+
private List data() throws Exception {
List list = new ArrayList<>();
AnnotationData data = new AnnotationData();
diff --git a/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataTest.java b/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataTest.java
index 937cf665..8b34c2a1 100644
--- a/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataTest.java
+++ b/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationIndexAndNameDataTest.java
@@ -8,13 +8,16 @@ import com.alibaba.easyexcel.test.util.TestFileUtil;
import com.alibaba.excel.EasyExcel;
import org.junit.BeforeClass;
+import org.junit.FixMethodOrder;
import org.junit.Test;
+import org.junit.runners.MethodSorters;
/**
* Annotation data test
*
* @author Jiaju Zhuang
*/
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class AnnotationIndexAndNameDataTest {
private static File file07;
diff --git a/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationStyleData.java b/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationStyleData.java
new file mode 100644
index 00000000..5b00e1ac
--- /dev/null
+++ b/src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationStyleData.java
@@ -0,0 +1,33 @@
+package com.alibaba.easyexcel.test.core.annotation;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ContentFontStyle;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadFontStyle;
+import com.alibaba.excel.annotation.write.style.HeadStyle;
+import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
+
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author Jiaju Zhuang
+ */
+@Getter
+@Setter
+@EqualsAndHashCode
+@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 10)
+@HeadFontStyle(fontHeightInPoints = 20, color = 15)
+@ContentStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 17)
+@ContentFontStyle(fontHeightInPoints = 30, color = 22)
+public class AnnotationStyleData {
+ @ExcelProperty("字符串")
+ @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 14)
+ @HeadFontStyle(fontHeightInPoints = 40, color = 51)
+ @ContentStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 40)
+ @ContentFontStyle(fontHeightInPoints = 50, color = 12)
+ private String string;
+ @ExcelProperty("字符串1")
+ private String string1;
+}
diff --git a/update.md b/update.md
index f1f90470..3e73f949 100644
--- a/update.md
+++ b/update.md
@@ -1,3 +1,6 @@
+# 3.0.3
+* 修复`HeadStyle`无效的bug
+
# 3.0.2
* 大幅提升读写性能
* 修复列宽注解没用的bug [Issue #2151](https://github.com/alibaba/easyexcel/issues/2151)