diff options
author | PJ Fanning <fanningpj@apache.org> | 2022-09-02 11:58:19 +0000 |
---|---|---|
committer | PJ Fanning <fanningpj@apache.org> | 2022-09-02 11:58:19 +0000 |
commit | dc12e93abbdc2e9675c31e425ee910764deff1b1 (patch) | |
tree | 0aec8d4f406192374860ed5603618dadd6c2f231 /poi/src | |
parent | fe8c8eca895d422155f92746fb4875a21c8f5901 (diff) | |
download | poi-dc12e93abbdc2e9675c31e425ee910764deff1b1.tar.gz poi-dc12e93abbdc2e9675c31e425ee910764deff1b1.zip |
CellUtil: allow fill colors to be set to null
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1903828 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poi/src')
-rw-r--r-- | poi/src/main/java/org/apache/poi/ss/util/CellUtil.java | 36 |
1 files changed, 29 insertions, 7 deletions
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 89e0fc74fd..7fd48aeae3 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 @@ -385,9 +385,14 @@ public final class CellUtil { * @since POI 3.14 beta 2 */ public static void setCellStyleProperties(Cell cell, Map<String, Object> properties) { + setCellStyleProperties(cell, properties, false); + } + + private static void setCellStyleProperties(final Cell cell, final Map<String, Object> properties, + final boolean disableNullColorCheck) { Workbook workbook = cell.getSheet().getWorkbook(); CellStyle originalStyle = cell.getCellStyle(); - + CellStyle newStyle = null; Map<String, Object> values = getFormatProperties(originalStyle); putAll(properties, values); @@ -401,7 +406,7 @@ public final class CellUtil { Map<String, Object> wbStyleMap = getFormatProperties(wbStyle); // the desired style already exists in the workbook. Use the existing style. - if (styleMapsMatch(wbStyleMap, values)) { + if (styleMapsMatch(wbStyleMap, values, disableNullColorCheck)) { newStyle = wbStyle; break; } @@ -416,7 +421,8 @@ public final class CellUtil { cell.setCellStyle(newStyle); } - private static boolean styleMapsMatch(final Map<String, Object> newProps, final Map<String, Object> storedProps) { + private static boolean styleMapsMatch(final Map<String, Object> newProps, + final Map<String, Object> storedProps, final boolean disableNullColorCheck) { final Map<String, Object> map1Copy = new HashMap<>(newProps); final Map<String, Object> map2Copy = new HashMap<>(storedProps); final Object backColor1 = map1Copy.remove(FILL_BACKGROUND_COLOR_COLOR); @@ -424,8 +430,10 @@ public final class CellUtil { final Object foreColor1 = map1Copy.remove(FILL_FOREGROUND_COLOR_COLOR); final Object foreColor2 = map2Copy.remove(FILL_FOREGROUND_COLOR_COLOR); if (map1Copy.equals(map2Copy)) { - final boolean backColorsMatch = backColor2 == null || Objects.equals(backColor1, backColor2); - final boolean foreColorsMatch = foreColor2 == null || Objects.equals(foreColor1, foreColor2); + final boolean backColorsMatch = (!disableNullColorCheck && backColor2 == null) + || Objects.equals(backColor1, backColor2); + final boolean foreColorsMatch = (!disableNullColorCheck && foreColor2 == null) + || Objects.equals(foreColor1, foreColor2); return backColorsMatch && foreColorsMatch; } return false; @@ -449,8 +457,22 @@ public final class CellUtil { * @param propertyValue The value of the property that is to be changed. */ public static void setCellStyleProperty(Cell cell, String propertyName, Object propertyValue) { - Map<String, Object> property = Collections.singletonMap(propertyName, propertyValue); - setCellStyleProperties(cell, property); + boolean disableNullColorCheck = false; + final Map<String, Object> propMap; + if (CellUtil.FILL_FOREGROUND_COLOR_COLOR.equals(propertyName) && propertyValue == null) { + disableNullColorCheck = true; + propMap = new HashMap<>(); + propMap.put(CellUtil.FILL_FOREGROUND_COLOR_COLOR, null); + propMap.put(CellUtil.FILL_FOREGROUND_COLOR, IndexedColors.AUTOMATIC.getIndex()); + } else if (CellUtil.FILL_BACKGROUND_COLOR_COLOR.equals(propertyName) && propertyValue == null) { + disableNullColorCheck = true; + propMap = new HashMap<>(); + propMap.put(CellUtil.FILL_BACKGROUND_COLOR_COLOR, null); + propMap.put(CellUtil.FILL_BACKGROUND_COLOR, IndexedColors.AUTOMATIC.getIndex()); + } else { + propMap = Collections.singletonMap(propertyName, propertyValue); + } + setCellStyleProperties(cell, propMap, disableNullColorCheck); } /** |