From: Nick Burch Date: Fri, 17 Jul 2015 01:20:20 +0000 (+0000) Subject: #58130 more progress towards supporting other CF types X-Git-Tag: REL_3_13_FINAL~243 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7562f031c0f7a2568134f14a6fbddf809de01ca7;p=poi.git #58130 more progress towards supporting other CF types git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1691472 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/hssf/record/CFRule12Record.java b/src/java/org/apache/poi/hssf/record/CFRule12Record.java index 230cb1dff4..a44f81cd27 100644 --- a/src/java/org/apache/poi/hssf/record/CFRule12Record.java +++ b/src/java/org/apache/poi/hssf/record/CFRule12Record.java @@ -20,11 +20,13 @@ package org.apache.poi.hssf.record; import java.util.Arrays; import org.apache.poi.hssf.record.cf.IconMultiStateFormatting; +import org.apache.poi.hssf.record.cf.Threshold; import org.apache.poi.hssf.record.common.FtrHeader; import org.apache.poi.hssf.record.common.FutureRecord; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.ss.formula.Formula; import org.apache.poi.ss.formula.ptg.Ptg; +import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndianOutput; @@ -116,6 +118,22 @@ public final class CFRule12Record extends CFRuleBase implements FutureRecord { return new CFRule12Record(CONDITION_TYPE_CELL_VALUE_IS, comparisonOperation, formula1, formula2, formula3); } + /** + * Creates a new Icon Set / Multi-State formatting + */ + public static CFRule12Record create(HSSFSheet sheet, IconSet iconSet) { + Threshold[] ts = new Threshold[iconSet.num]; + for (int i=0; iThis method could be used to copy HSSFConditionalFormatting object diff --git a/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingRule.java b/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingRule.java index 04c04a269d..5fb315147e 100644 --- a/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingRule.java +++ b/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingRule.java @@ -74,10 +74,15 @@ public interface ConditionalFormattingRule { PatternFormatting createPatternFormatting(); /** - * @return - pattern formatting object if defined, null otherwise + * @return - pattern formatting object if defined, null otherwise */ PatternFormatting getPatternFormatting(); + /** + * @return - icon / multi-state formatting object if defined, null otherwise + */ + IconMultiStateFormatting getMultiStateFormatting(); + /** * Type of conditional formatting rule. *

diff --git a/src/java/org/apache/poi/ss/usermodel/SheetConditionalFormatting.java b/src/java/org/apache/poi/ss/usermodel/SheetConditionalFormatting.java index 92e64124a4..a28c342a74 100644 --- a/src/java/org/apache/poi/ss/usermodel/SheetConditionalFormatting.java +++ b/src/java/org/apache/poi/ss/usermodel/SheetConditionalFormatting.java @@ -19,6 +19,7 @@ package org.apache.poi.ss.usermodel; +import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet; import org.apache.poi.ss.util.CellRangeAddress; /** @@ -135,6 +136,18 @@ public interface SheetConditionalFormatting { */ ConditionalFormattingRule createConditionalFormattingRule(String formula); + /** + * Create an Icon Set / Multi-State conditional formatting rule. + *

The thresholds for it will be created, but will be empty + * and require configuring with + * {@link ConditionalFormattingRule#getMultiStateFormatting()} + * then + * {@link IconMultiStateFormatting#getThresholds()} + */ + ConditionalFormattingRule createConditionalFormattingRule(IconSet iconSet); + + // TODO Support types beyond CELL_VALUE_IS and FORMULA and ICONs + /** * Gets Conditional Formatting object at a particular index * diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFConditionalFormattingRule.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFConditionalFormattingRule.java index 92b91ceeb5..a1386e400d 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFConditionalFormattingRule.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFConditionalFormattingRule.java @@ -178,6 +178,14 @@ public class XSSFConditionalFormattingRule implements ConditionalFormattingRule return new XSSFPatternFormatting(dxf.getFill()); } + + + public IconMultiStateFormatting createMultiStateFormatting() { + throw new IllegalArgumentException("Not implemented yet"); // TODO + } + public IconMultiStateFormatting getMultiStateFormatting() { + throw new IllegalArgumentException("Not implemented yet"); // TODO + } /** * Type of conditional formatting rule. diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheetConditionalFormatting.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheetConditionalFormatting.java index af3e07a8df..23d5f39f8e 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheetConditionalFormatting.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheetConditionalFormatting.java @@ -27,10 +27,13 @@ import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.usermodel.ComparisonOperator; import org.apache.poi.ss.usermodel.ConditionalFormatting; import org.apache.poi.ss.usermodel.ConditionalFormattingRule; +import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet; import org.apache.poi.ss.usermodel.SheetConditionalFormatting; import org.apache.poi.ss.util.CellRangeAddress; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCfRule; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColorScale; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTConditionalFormatting; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTIconSet; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCfType; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STConditionalFormattingOperator; @@ -118,6 +121,32 @@ public class XSSFSheetConditionalFormatting implements SheetConditionalFormattin return rule; } + /** + * A factory method allowing the creation of conditional formatting + * rules using an Icon Set / Multi-State formatting. + * The thresholds for it will be created, but will be empty + * and require configuring with + * {@link XSSFConditionalFormattingRule#getMultiStateFormatting()} + * then + * {@link XSSFIconMultiStateFormatting#getThresholds()} + */ + public XSSFConditionalFormattingRule createConditionalFormattingRule(IconSet iconSet) { + XSSFConditionalFormattingRule rule = new XSSFConditionalFormattingRule(_sheet); + CTCfRule cfRule = rule.getCTCfRule(); + cfRule.setType(STCfType.COLOR_SCALE); + + CTIconSet icons = cfRule.addNewIconSet(); + if (iconSet.name != null) { + // TODO Map to the enum +// icons.setIconSet(); + } + // TODO Add cfvos + + return rule; + } + + // TODO Support types beyond CELL_VALUE_IS and FORMULA and ICONs + @SuppressWarnings("deprecation") public int addConditionalFormatting(CellRangeAddress[] regions, ConditionalFormattingRule[] cfRules) { if (regions == null) {