From 4b53acc00ba50e434c3d69e8eb9c8a27eaa70241 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Thu, 4 Nov 2021 17:51:40 +0800 Subject: [PATCH] =?UTF-8?q?*=20=E4=BF=AE=E5=A4=8D`HeadStyle`=E6=97=A0?= =?UTF-8?q?=E6=95=88=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metadata/holder/AbstractWriteHolder.java | 8 ++- .../core/annotation/AnnotationDataTest.java | 60 ++++++++++++++++++- .../AnnotationIndexAndNameDataTest.java | 3 + .../core/annotation/AnnotationStyleData.java | 33 ++++++++++ 4 files changed, 98 insertions(+), 6 deletions(-) create mode 100644 src/test/java/com/alibaba/easyexcel/test/core/annotation/AnnotationStyleData.java 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; +}