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;
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; i<ts.length; i++) {
+ ts[i] = new Threshold();
+ }
+
+ CFRule12Record r = new CFRule12Record(CONDITION_TYPE_COLOR_SCALE,
+ ComparisonOperator.NO_COMPARISON);
+ r.getMultiStateFormatting().setIconSet(iconSet);
+ r.getMultiStateFormatting().setThresholds(ts);
+ return r;
+ }
+ // TODO Static creators for the other record types
public CFRule12Record(RecordInputStream in) {
futureHeader = new FtrHeader(in);
package org.apache.poi.hssf.usermodel;
+import org.apache.poi.hssf.record.CFRule12Record;
import org.apache.poi.hssf.record.CFRuleBase;
import org.apache.poi.hssf.record.CFRuleRecord;
import org.apache.poi.hssf.record.aggregates.CFRecordsAggregate;
import org.apache.poi.ss.SpreadsheetVersion;
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;
return new HSSFConditionalFormattingRule(_sheet, rr);
}
- // TODO Support types beyond CELL_VALUE_IS and FORMULA
-
/**
* A factory method allowing the creation of conditional formatting
- * rules using an Icon Set / Multi-State 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 HSSFConditionalFormattingRule#getMultiStateFormatting()}
+ * then
+ * {@link HSSFIconMultiStateFormatting#getThresholds()}
*/
- // TODO Implement
-/*
public HSSFConditionalFormattingRule createConditionalFormattingRule(
- IconSet iconSet) { // TODO Multi-State data for it
+ IconSet iconSet) {
CFRule12Record rr = CFRule12Record.create(_sheet, iconSet);
return new HSSFConditionalFormattingRule(_sheet, rr);
}
-*/
+ // TODO Support types beyond CELL_VALUE_IS and FORMULA and ICONs
+
/**
* Adds a copy of HSSFConditionalFormatting object to the sheet
* <p>This method could be used to copy HSSFConditionalFormatting object
PatternFormatting createPatternFormatting();\r
\r
/**\r
- * @return - pattern formatting object if defined, <code>null</code> otherwise\r
+ * @return - pattern formatting object if defined, <code>null</code> otherwise\r
*/\r
PatternFormatting getPatternFormatting();\r
\r
+ /**\r
+ * @return - icon / multi-state formatting object if defined, <code>null</code> otherwise\r
+ */\r
+ IconMultiStateFormatting getMultiStateFormatting();\r
+ \r
/**\r
* Type of conditional formatting rule.\r
* <p>\r
\r
package org.apache.poi.ss.usermodel;\r
\r
+import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;\r
import org.apache.poi.ss.util.CellRangeAddress;\r
\r
/**\r
*/\r
ConditionalFormattingRule createConditionalFormattingRule(String formula);\r
\r
+ /**\r
+ * Create an Icon Set / Multi-State conditional formatting rule.\r
+ * <p>The thresholds for it will be created, but will be empty\r
+ * and require configuring with \r
+ * {@link ConditionalFormattingRule#getMultiStateFormatting()}\r
+ * then\r
+ * {@link IconMultiStateFormatting#getThresholds()}\r
+ */\r
+ ConditionalFormattingRule createConditionalFormattingRule(IconSet iconSet);\r
+\r
+ // TODO Support types beyond CELL_VALUE_IS and FORMULA and ICONs\r
+ \r
/**\r
* Gets Conditional Formatting object at a particular index\r
*\r
\r
return new XSSFPatternFormatting(dxf.getFill());\r
}\r
+ \r
+\r
+ public IconMultiStateFormatting createMultiStateFormatting() {\r
+ throw new IllegalArgumentException("Not implemented yet"); // TODO \r
+ }\r
+ public IconMultiStateFormatting getMultiStateFormatting() {\r
+ throw new IllegalArgumentException("Not implemented yet"); // TODO \r
+ }\r
\r
/**\r
* Type of conditional formatting rule.\r
import org.apache.poi.ss.usermodel.ComparisonOperator;\r
import org.apache.poi.ss.usermodel.ConditionalFormatting;\r
import org.apache.poi.ss.usermodel.ConditionalFormattingRule;\r
+import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;\r
import org.apache.poi.ss.usermodel.SheetConditionalFormatting;\r
import org.apache.poi.ss.util.CellRangeAddress;\r
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCfRule;\r
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColorScale;\r
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTConditionalFormatting;\r
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTIconSet;\r
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;\r
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCfType;\r
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STConditionalFormattingOperator;\r
return rule;\r
}\r
\r
+ /**\r
+ * A factory method allowing the creation of conditional formatting\r
+ * rules using an Icon Set / Multi-State formatting.\r
+ * The thresholds for it will be created, but will be empty\r
+ * and require configuring with \r
+ * {@link XSSFConditionalFormattingRule#getMultiStateFormatting()}\r
+ * then\r
+ * {@link XSSFIconMultiStateFormatting#getThresholds()}\r
+ */\r
+ public XSSFConditionalFormattingRule createConditionalFormattingRule(IconSet iconSet) {\r
+ XSSFConditionalFormattingRule rule = new XSSFConditionalFormattingRule(_sheet);\r
+ CTCfRule cfRule = rule.getCTCfRule();\r
+ cfRule.setType(STCfType.COLOR_SCALE);\r
+\r
+ CTIconSet icons = cfRule.addNewIconSet();\r
+ if (iconSet.name != null) {\r
+ // TODO Map to the enum\r
+// icons.setIconSet();\r
+ }\r
+ // TODO Add cfvos\r
+ \r
+ return rule;\r
+ }\r
+\r
+ // TODO Support types beyond CELL_VALUE_IS and FORMULA and ICONs\r
+ \r
@SuppressWarnings("deprecation")\r
public int addConditionalFormatting(CellRangeAddress[] regions, ConditionalFormattingRule[] cfRules) {\r
if (regions == null) {\r