public IconMultiStateFormatting getMultiStateFormatting() {
return multistate;
}
+ public IconMultiStateFormatting createMultiStateFormatting() {
+ if (multistate != null) return multistate;
+
+ // Convert, setup and return
+ setConditionType(CONDITION_TYPE_ICON_SET);
+ multistate = new IconMultiStateFormatting();
+ return multistate;
+ }
/**
* get the stack of the scale expression as a list
package org.apache.poi.hssf.usermodel;
import org.apache.poi.hssf.model.HSSFFormulaParser;
+import org.apache.poi.hssf.record.CFRule12Record;
import org.apache.poi.hssf.record.CFRuleBase;
import org.apache.poi.hssf.record.CFRuleBase.ComparisonOperator;
import org.apache.poi.hssf.record.CFRuleRecord;
import org.apache.poi.hssf.record.cf.BorderFormatting;
import org.apache.poi.hssf.record.cf.FontFormatting;
+import org.apache.poi.hssf.record.cf.IconMultiStateFormatting;
import org.apache.poi.hssf.record.cf.PatternFormatting;
import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.ss.usermodel.ConditionType;
{
return getPatternFormatting(true);
}
+
+ private HSSFIconMultiStateFormatting getMultiStateFormatting(boolean create) {
+ if (cfRuleRecord instanceof CFRule12Record) {
+ // Good
+ } else {
+ if (create) throw new IllegalArgumentException("Can't convert a CF into a CF12 record");
+ return null;
+ }
+ CFRule12Record cfRule12Record = (CFRule12Record)cfRuleRecord;
+ IconMultiStateFormatting iconFormatting = cfRule12Record.getMultiStateFormatting();
+ if (iconFormatting != null)
+ {
+ return new HSSFIconMultiStateFormatting(cfRule12Record);
+ }
+ else if( create )
+ {
+ iconFormatting = cfRule12Record.createMultiStateFormatting();
+ return new HSSFIconMultiStateFormatting(cfRule12Record);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * @return icon / multi-state formatting object if defined, <code>null</code> otherwise
+ */
+ public HSSFIconMultiStateFormatting getMultiStateFormatting() {
+ return getMultiStateFormatting(false);
+ }
+ /**
+ * create a new icon / multi-state formatting object if it does not exist,
+ * otherwise just return the existing object.
+ */
+ public HSSFIconMultiStateFormatting createMultiStateFormatting() {
+ return getMultiStateFormatting(true);
+ }
+
/**
* @return - the conditiontype for the cfrule
*/
}
private String toFormulaString(Ptg[] parsedExpression) {
- if(parsedExpression ==null) {
+ if(parsedExpression == null || parsedExpression.length == 0) {
return null;
}
return HSSFFormulaParser.toFormulaString(workbook, parsedExpression);
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;
CFRuleRecord rr = CFRuleRecord.create(_sheet, formula);
return new HSSFConditionalFormattingRule(wb, rr);
}
+
+ /**
+ * A factory method allowing the creation of conditional formatting
+ * rules using an Icon Set / Multi-State formatting/
+ */
+ // TODO Implement
+/*
+ public HSSFConditionalFormattingRule createConditionalFormattingRule(
+ IconSet iconSet) { // TODO Multi-State data for it
+ HSSFWorkbook wb = _sheet.getWorkbook();
+ CFRule12Record rr = CFRule12Record.create(_sheet, iconSet);
+ return new HSSFConditionalFormattingRule(wb, rr);
+ }
+*/
/**
* Adds a copy of HSSFConditionalFormatting object to the sheet
import org.apache.poi.hssf.usermodel.HSSFConditionalFormatting;\r
import org.apache.poi.hssf.usermodel.HSSFConditionalFormattingRule;\r
import org.apache.poi.ss.ITestDataProvider;\r
+import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;\r
import org.apache.poi.ss.util.CellRangeAddress;\r
\r
/**\r
Sheet s = wb.getSheet("CF");\r
ConditionalFormatting cf = null;\r
ConditionalFormattingRule cr = null;\r
+ IconMultiStateFormatting icon = null;\r
\r
// Sanity check data\r
assertEquals("Values", s.getRow(0).getCell(0).toString());\r
\r
// Colours R->G - Column F\r
// Colours BWR - Column G\r
+ \r
// Icons : Default - Column H\r
+ cf = sheetCF.getConditionalFormattingAt(5);\r
+ assertEquals(1, cf.getFormattingRanges().length);\r
+ assertEquals("H2:H17", cf.getFormattingRanges()[0].formatAsString());\r
+ \r
+ assertEquals(1, cf.getNumberOfRules());\r
+ cr = cf.getRule(0);\r
+ assertEquals(ConditionType.ICON_SET, cr.getConditionTypeType());\r
+ assertEquals(ComparisonOperator.NO_COMPARISON, cr.getComparisonOperation());\r
+ assertEquals(null, cr.getFormula1());\r
+ assertEquals(null, cr.getFormula2());\r
+ if (cr instanceof HSSFConditionalFormattingRule) {\r
+ HSSFConditionalFormattingRule hcr = (HSSFConditionalFormattingRule)cr;\r
+ icon = hcr.getMultiStateFormatting();\r
+ assertNotNull(icon);\r
+ assertEquals(IconSet.GYR_3_TRAFFIC_LIGHTS, icon.getIconSet());\r
+ assertEquals(false, icon.isIconOnly());\r
+ assertEquals(false, icon.isReversed());\r
+ // TODO Check the rest\r
+ } else {\r
+ // TODO XSSF Support\r
+ }\r
+ \r
// Icons : 3 signs - Column I\r
// Icons : 3 traffic lights 2 - Column J\r
// Icons : 4 traffic lights - Column K\r
assertEquals(BorderFormatting.BORDER_HAIR, r1fp.getBorderRight());\r
}\r
\r
+ public void testCreateIconFormatting() {\r
+ // TODO Implement for XSSF, then test here\r
+ }\r
+ \r
public void testBug55380() {\r
Workbook wb = _testDataProvider.createWorkbook();\r
Sheet sheet = wb.createSheet();\r