aboutsummaryrefslogtreecommitdiffstats
path: root/poi/src
diff options
context:
space:
mode:
authorPJ Fanning <fanningpj@apache.org>2022-09-02 11:58:19 +0000
committerPJ Fanning <fanningpj@apache.org>2022-09-02 11:58:19 +0000
commitdc12e93abbdc2e9675c31e425ee910764deff1b1 (patch)
tree0aec8d4f406192374860ed5603618dadd6c2f231 /poi/src
parentfe8c8eca895d422155f92746fb4875a21c8f5901 (diff)
downloadpoi-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.java36
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);
}
/**