public int AddConditionalFormatting(CellRangeAddress[] regions, IConditionalFormattingRule[] cfRules)
        {
            if (regions == null)
            {
                throw new ArgumentException("regions must not be null");
            }
            foreach (CellRangeAddress range in regions)
            {
                range.Validate(SpreadsheetVersion.EXCEL2007);
            }

            if (cfRules == null)
            {
                throw new ArgumentException("cfRules must not be null");
            }
            if (cfRules.Length == 0)
            {
                throw new ArgumentException("cfRules must not be empty");
            }
            if (cfRules.Length > 3)
            {
                throw new ArgumentException("Number of rules must not exceed 3");
            }
            XSSFConditionalFormattingRule[] hfRules;
            if (cfRules is XSSFConditionalFormattingRule[])
            {
                hfRules = (XSSFConditionalFormattingRule[])cfRules;
            }
            else
            {
                hfRules = new XSSFConditionalFormattingRule[cfRules.Length];
                Array.Copy(cfRules, 0, hfRules, 0, hfRules.Length);
            }

            CellRangeAddress[]       mergeCellRanges = CellRangeUtil.MergeCellRanges(regions);
            CT_ConditionalFormatting cf   = _sheet.GetCTWorksheet().AddNewConditionalFormatting();
            List <String>            refs = new List <String>();

            foreach (CellRangeAddress a in mergeCellRanges)
            {
                refs.Add(a.FormatAsString());
            }
            cf.sqref = (refs);


            int priority = 1;

            foreach (CT_ConditionalFormatting c in _sheet.GetCTWorksheet().conditionalFormatting)
            {
                priority += c.sizeOfCfRuleArray();
            }

            foreach (IConditionalFormattingRule rule in cfRules)
            {
                XSSFConditionalFormattingRule xRule = (XSSFConditionalFormattingRule)rule;
                xRule.GetCTCfRule().priority        = (priority++);
                cf.AddNewCfRule().Set(xRule.GetCTCfRule());
            }
            return(_sheet.GetCTWorksheet().SizeOfConditionalFormattingArray() - 1);
        }
예제 #2
0
        public int AddConditionalFormatting(CellRangeAddress[] regions, IConditionalFormattingRule[] cfRules)
        {
            if (regions == null)
            {
                throw new ArgumentException("regions must not be null");
            }
            foreach (CellRangeAddress range in regions)
            {
                range.Validate(SpreadsheetVersion.EXCEL2007);
            }

            if (cfRules == null)
            {
                throw new ArgumentException("cfRules must not be null");
            }
            if (cfRules.Length == 0)
            {
                throw new ArgumentException("cfRules must not be empty");
            }

            CellRangeAddress[]       mergeCellRanges = CellRangeUtil.MergeCellRanges(regions);
            CT_ConditionalFormatting cf = _sheet.GetCTWorksheet().AddNewConditionalFormatting();
            string refs = string.Empty;

            foreach (CellRangeAddress a in mergeCellRanges)
            {
                if (refs.Length == 0)
                {
                    refs = a.FormatAsString();
                }
                else
                {
                    refs += " " + a.FormatAsString();
                }
            }
            cf.sqref = refs;

            int priority = 1;

            foreach (CT_ConditionalFormatting c in _sheet.GetCTWorksheet().conditionalFormatting)
            {
                priority += c.sizeOfCfRuleArray();
            }

            foreach (IConditionalFormattingRule rule in cfRules)
            {
                XSSFConditionalFormattingRule xRule = (XSSFConditionalFormattingRule)rule;
                xRule.GetCTCfRule().priority        = (priority++);
                cf.AddNewCfRule().Set(xRule.GetCTCfRule());
            }
            return(_sheet.GetCTWorksheet().SizeOfConditionalFormattingArray() - 1);
        }
        /**
         * A factory method allowing to create a conditional formatting rule
         * with a cell comparison operator<p/>
         * TODO - formulas Containing cell references are currently not Parsed properly
         *
         * @param comparisonOperation - a constant value from
         *		 <tt>{@link NPOI.hssf.record.CFRuleRecord.ComparisonOperator}</tt>: <p>
         * <ul>
         *		 <li>BETWEEN</li>
         *		 <li>NOT_BETWEEN</li>
         *		 <li>EQUAL</li>
         *		 <li>NOT_EQUAL</li>
         *		 <li>GT</li>
         *		 <li>LT</li>
         *		 <li>GE</li>
         *		 <li>LE</li>
         * </ul>
         * </p>
         * @param formula1 - formula for the valued, Compared with the cell
         * @param formula2 - second formula (only used with
         * {@link NPOI.ss.usermodel.ComparisonOperator#BETWEEN}) and
         * {@link NPOI.ss.usermodel.ComparisonOperator#NOT_BETWEEN} operations)
         */
        public IConditionalFormattingRule CreateConditionalFormattingRule(
                ComparisonOperator comparisonOperation,
                String formula1,
                String formula2)
        {

            XSSFConditionalFormattingRule rule = new XSSFConditionalFormattingRule(_sheet);
            CT_CfRule cfRule = rule.GetCTCfRule();
            cfRule.AddFormula(formula1);
            if (formula2 != null) cfRule.AddFormula(formula2);
            cfRule.type = (ST_CfType.cellIs);
            ST_ConditionalFormattingOperator operator1;
            switch (comparisonOperation)
            {
                case ComparisonOperator.BETWEEN: operator1 = ST_ConditionalFormattingOperator.between; break;
                case ComparisonOperator.NOT_BETWEEN: operator1 = ST_ConditionalFormattingOperator.notBetween; break;
                case ComparisonOperator.LT: operator1 = ST_ConditionalFormattingOperator.lessThan; break;
                case ComparisonOperator.LE: operator1 = ST_ConditionalFormattingOperator.lessThanOrEqual; break;
                case ComparisonOperator.GT: operator1 = ST_ConditionalFormattingOperator.greaterThan; break;
                case ComparisonOperator.GE: operator1 = ST_ConditionalFormattingOperator.greaterThanOrEqual; break;
                case ComparisonOperator.EQUAL: operator1 = ST_ConditionalFormattingOperator.equal; break;
                case ComparisonOperator.NOT_EQUAL: operator1 = ST_ConditionalFormattingOperator.notEqual; break;
                default: throw new ArgumentException("Unknown comparison operator: " + comparisonOperation);
            }
            cfRule.@operator = (operator1);

            return rule;
        }
예제 #4
0
        /**
         * A factory method allowing to create a conditional formatting rule with a formula.<br>
         *
         * @param formula - formula for the valued, Compared with the cell
         */
        public IConditionalFormattingRule CreateConditionalFormattingRule(String formula)
        {
            XSSFConditionalFormattingRule rule = new XSSFConditionalFormattingRule(_sheet);
            CT_CfRule cfRule = rule.GetCTCfRule();

            cfRule.AddFormula(formula);
            cfRule.type = ST_CfType.expression;
            return(rule);
        }
        public IConditionalFormattingRule CreateConditionalFormattingRule(string formula)
        {
            XSSFConditionalFormattingRule conditionalFormattingRule = new XSSFConditionalFormattingRule(this._sheet);
            CT_CfRule ctCfRule = conditionalFormattingRule.GetCTCfRule();

            ctCfRule.AddFormula(formula);
            ctCfRule.type = ST_CfType.expression;
            return((IConditionalFormattingRule)conditionalFormattingRule);
        }
        public IConditionalFormattingRule CreateConditionalFormattingRule(ComparisonOperator comparisonOperation, string formula1, string formula2)
        {
            XSSFConditionalFormattingRule conditionalFormattingRule = new XSSFConditionalFormattingRule(this._sheet);
            CT_CfRule ctCfRule = conditionalFormattingRule.GetCTCfRule();

            ctCfRule.AddFormula(formula1);
            if (formula2 != null)
            {
                ctCfRule.AddFormula(formula2);
            }
            ctCfRule.type = ST_CfType.cellIs;
            ST_ConditionalFormattingOperator formattingOperator;

            switch (comparisonOperation)
            {
            case ComparisonOperator.BETWEEN:
                formattingOperator = ST_ConditionalFormattingOperator.between;
                break;

            case ComparisonOperator.NOT_BETWEEN:
                formattingOperator = ST_ConditionalFormattingOperator.notBetween;
                break;

            case ComparisonOperator.EQUAL:
                formattingOperator = ST_ConditionalFormattingOperator.equal;
                break;

            case ComparisonOperator.NOT_EQUAL:
                formattingOperator = ST_ConditionalFormattingOperator.notEqual;
                break;

            case ComparisonOperator.GT:
                formattingOperator = ST_ConditionalFormattingOperator.greaterThan;
                break;

            case ComparisonOperator.LT:
                formattingOperator = ST_ConditionalFormattingOperator.lessThan;
                break;

            case ComparisonOperator.GE:
                formattingOperator = ST_ConditionalFormattingOperator.greaterThanOrEqual;
                break;

            case ComparisonOperator.LE:
                formattingOperator = ST_ConditionalFormattingOperator.lessThanOrEqual;
                break;

            default:
                throw new ArgumentException("Unknown comparison operator: " + (object)comparisonOperation);
            }
            ctCfRule.@operator = formattingOperator;
            return((IConditionalFormattingRule)conditionalFormattingRule);
        }
예제 #7
0
        /**
         * A factory method allowing to create a conditional formatting rule
         * with a cell comparison operator<p/>
         * TODO - formulas Containing cell references are currently not Parsed properly
         *
         * @param comparisonOperation - a constant value from
         *		 <tt>{@link NPOI.hssf.record.CFRuleRecord.ComparisonOperator}</tt>: <p>
         * <ul>
         *		 <li>BETWEEN</li>
         *		 <li>NOT_BETWEEN</li>
         *		 <li>EQUAL</li>
         *		 <li>NOT_EQUAL</li>
         *		 <li>GT</li>
         *		 <li>LT</li>
         *		 <li>GE</li>
         *		 <li>LE</li>
         * </ul>
         * </p>
         * @param formula1 - formula for the valued, Compared with the cell
         * @param formula2 - second formula (only used with
         * {@link NPOI.ss.usermodel.ComparisonOperator#BETWEEN}) and
         * {@link NPOI.ss.usermodel.ComparisonOperator#NOT_BETWEEN} operations)
         */
        public IConditionalFormattingRule CreateConditionalFormattingRule(
            ComparisonOperator comparisonOperation,
            String formula1,
            String formula2)
        {
            XSSFConditionalFormattingRule rule = new XSSFConditionalFormattingRule(_sheet);
            CT_CfRule cfRule = rule.GetCTCfRule();

            cfRule.AddFormula(formula1);
            if (formula2 != null)
            {
                cfRule.AddFormula(formula2);
            }
            cfRule.type = (ST_CfType.cellIs);
            ST_ConditionalFormattingOperator operator1;

            switch (comparisonOperation)
            {
            case ComparisonOperator.Between:
                operator1 = ST_ConditionalFormattingOperator.between; break;

            case ComparisonOperator.NotBetween:
                operator1 = ST_ConditionalFormattingOperator.notBetween; break;

            case ComparisonOperator.LessThan:
                operator1 = ST_ConditionalFormattingOperator.lessThan; break;

            case ComparisonOperator.LessThanOrEqual:
                operator1 = ST_ConditionalFormattingOperator.lessThanOrEqual; break;

            case ComparisonOperator.GreaterThan:
                operator1 = ST_ConditionalFormattingOperator.greaterThan; break;

            case ComparisonOperator.GreaterThanOrEqual:
                operator1 = ST_ConditionalFormattingOperator.greaterThanOrEqual; break;

            case ComparisonOperator.Equal:
                operator1 = ST_ConditionalFormattingOperator.equal; break;

            case ComparisonOperator.NotEqual:
                operator1 = ST_ConditionalFormattingOperator.notEqual; break;

            default:
                throw new ArgumentException("Unknown comparison operator: " + comparisonOperation);
            }
            cfRule.@operator = (operator1);

            return(rule);
        }
예제 #8
0
 /**
  * Add a Conditional Formatting rule.
  * Excel allows to create up to 3 Conditional Formatting rules.
  *
  * @param cfRule - Conditional Formatting rule
  */
 public void AddRule(IConditionalFormattingRule cfRule)
 {
     XSSFConditionalFormattingRule xRule = (XSSFConditionalFormattingRule)cfRule;
     _cf.AddNewCfRule().Set(xRule.GetCTCfRule());
 }
예제 #9
0
 /**
  * Replaces an existing Conditional Formatting rule at position idx.
  * Excel allows to create up to 3 Conditional Formatting rules.
  * This method can be useful to modify existing  Conditional Formatting rules.
  *
  * @param idx position of the rule. Should be between 0 and 2.
  * @param cfRule - Conditional Formatting rule
  */
 public void SetRule(int idx, IConditionalFormattingRule cfRule)
 {
     XSSFConditionalFormattingRule xRule = (XSSFConditionalFormattingRule)cfRule;
     _cf.GetCfRuleArray(idx).Set(xRule.GetCTCfRule());
 }
 /**
  * A factory method allowing to create a conditional formatting rule with a formula.<br>
  *
  * @param formula - formula for the valued, Compared with the cell
  */
 public IConditionalFormattingRule CreateConditionalFormattingRule(String formula)
 {
     XSSFConditionalFormattingRule rule = new XSSFConditionalFormattingRule(_sheet);
     CT_CfRule cfRule = rule.GetCTCfRule();
     cfRule.AddFormula(formula);
     cfRule.type = ST_CfType.expression;
     return rule;
 }