From e485bf0b652f55764520a47d630bdbe91b080b7d Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Fri, 2 Sep 2022 22:54:03 +0000 Subject: [PATCH] add CellUtil test git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1903837 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/ss/tests/util/TestXSSFCellUtil.java | 38 +++++++++++++++++++ .../java/org/apache/poi/ss/util/CellUtil.java | 6 +++ 2 files changed, 44 insertions(+) diff --git a/poi-ooxml/src/test/java/org/apache/poi/ss/tests/util/TestXSSFCellUtil.java b/poi-ooxml/src/test/java/org/apache/poi/ss/tests/util/TestXSSFCellUtil.java index 8a6f85e85a..8b0547cb69 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/ss/tests/util/TestXSSFCellUtil.java +++ b/poi-ooxml/src/test/java/org/apache/poi/ss/tests/util/TestXSSFCellUtil.java @@ -20,6 +20,7 @@ package org.apache.poi.ss.tests.util; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Hex; import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; @@ -31,7 +32,11 @@ import org.apache.poi.xssf.usermodel.XSSFColor; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.jupiter.api.Test; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStream; +import java.util.LinkedHashMap; +import java.util.Map; import static org.junit.jupiter.api.Assertions.*; @@ -83,4 +88,37 @@ class TestXSSFCellUtil extends BaseTestCellUtil { assertEquals(IndexedColors.AUTOMATIC.getIndex(), cell.getCellStyle().getFillForegroundColor()); } } + + @Test + public void testSetForegroundColorCellStylePropertiesToNull() throws IOException, DecoderException { + + try (Workbook workbook = new XSSFWorkbook()) { + + final Sheet sheet = workbook.createSheet("Sheet"); + final Row row = sheet.createRow(0); + final Cell cell = row.createCell(0); + final XSSFColor color = new XSSFColor(Hex.decodeHex("FF0000")); + + { + final Map properties = new LinkedHashMap<>(); + + properties.put(CellUtil.FILL_FOREGROUND_COLOR_COLOR, color); + properties.put(CellUtil.FILL_PATTERN, FillPatternType.SOLID_FOREGROUND); + + CellUtil.setCellStyleProperties(cell, properties); + } + assertEquals(color, cell.getCellStyle().getFillForegroundColorColor()); + + { + final Map properties = new LinkedHashMap<>(); + + properties.put(CellUtil.FILL_FOREGROUND_COLOR_COLOR, null); + properties.put(CellUtil.FILL_PATTERN, FillPatternType.NO_FILL); + + CellUtil.setCellStyleProperties(cell, properties); + } + assertNull(cell.getCellStyle().getFillForegroundColorColor()); + assertEquals(IndexedColors.AUTOMATIC.getIndex(), cell.getCellStyle().getFillForegroundColor()); + } + } } \ No newline at end of file diff --git a/poi/src/main/java/org/apache/poi/ss/util/CellUtil.java b/poi/src/main/java/org/apache/poi/ss/util/CellUtil.java index 44ee0b53c1..0ba1123161 100644 --- a/poi/src/main/java/org/apache/poi/ss/util/CellUtil.java +++ b/poi/src/main/java/org/apache/poi/ss/util/CellUtil.java @@ -395,6 +395,12 @@ public final class CellUtil { CellStyle newStyle = null; Map values = getFormatProperties(originalStyle); + if (properties.containsKey(FILL_FOREGROUND_COLOR_COLOR) && properties.get(FILL_FOREGROUND_COLOR_COLOR) == null) { + values.remove(FILL_FOREGROUND_COLOR); + } + if (properties.containsKey(FILL_BACKGROUND_COLOR_COLOR) && properties.get(FILL_BACKGROUND_COLOR_COLOR) == null) { + values.remove(FILL_BACKGROUND_COLOR); + } putAll(properties, values); // index seems like what index the cellstyle is in the list of styles for a workbook.