コード例 #1
0
        /// <summary>
        /// Create the 'cfvo'/'color' nodes in the right order. They should appear like this:
        ///		"cfvo"   --> Low Value (value object)
        ///		"cfvo"   --> Middle Value (value object)
        ///		"cfvo"   --> High Value (value object)
        ///		"color"  --> Low Value (color)
        ///		"color"  --> Middle Value (color)
        ///		"color"  --> High Value (color)
        /// </summary>
        /// <param name="nodeType"></param>
        /// <param name="attributePath"></param>
        /// <param name="attributeValue"></param>
        private void CreateNodeByOrdem(
            eExcelConditionalFormattingValueObjectNodeType nodeType,
            string attributePath,
            string attributeValue)
        {
            // Save the current TopNode
            XmlNode currentTopNode = TopNode;

            string           nodePath        = ExcelConditionalFormattingValueObjectType.GetNodePathByNodeType(nodeType);
            int              nodeOrder       = GetNodeOrder();
            eNodeInsertOrder nodeInsertOrder = eNodeInsertOrder.SchemaOrder;
            XmlNode          referenceNode   = null;

            if (nodeOrder > 1)
            {
                // Find the node just before the one we need to include
                referenceNode = TopNode.SelectSingleNode(
                    string.Format(
                        "{0}[position()={1}]",
                        // {0}
                        nodePath,
                        // {1}
                        nodeOrder - 1),
                    _worksheet.NameSpaceManager);

                // Only if the prepend node exists than insert after
                if (referenceNode != null)
                {
                    nodeInsertOrder = eNodeInsertOrder.After;
                }
            }

            // Create the node in the right order
            var node = CreateComplexNode(
                TopNode,
                string.Format(
                    "{0}[position()={1}]",
                    // {0}
                    nodePath,
                    // {1}
                    nodeOrder),
                nodeInsertOrder,
                referenceNode);

            // Point to the new node as the temporary TopNode (we need it for the XmlHelper functions)
            TopNode = node;

            // Add/Remove the attribute (if the attributeValue is empty then it will be removed)
            SetXmlNodeString(
                node,
                attributePath,
                attributeValue,
                true);

            // Point back to the <cfvo>/<color> parent node
            TopNode = currentTopNode;
        }
コード例 #2
0
        /// <summary>
        /// Initialize the cfvo (§18.3.1.11) node
        /// </summary>
        /// <param name="ruleType"></param>
        /// <param name="address"></param>
        /// <param name="worksheet"></param>
        /// <param name="itemElementNode">The cfvo (§18.3.1.11) node parent. Can be any of the following:
        /// colorScale (§18.3.1.16); dataBar (§18.3.1.28); iconSet (§18.3.1.49)</param>
        /// <param name="namespaceManager"></param>
        internal ExcelConditionalFormattingIconDataBarValue(
            eExcelConditionalFormattingRuleType ruleType,
            ExcelAddress address,
            ExcelWorksheet worksheet,
            XmlNode itemElementNode,
            XmlNamespaceManager namespaceManager)
            : base(
                namespaceManager,
                itemElementNode)
        {
            Require.Argument(address).IsNotNull("address");
            Require.Argument(worksheet).IsNotNull("worksheet");

            // Save the worksheet for private methods to use
            _worksheet = worksheet;

            // Schema order list
            SchemaNodeOrder = new string[]
            {
                ExcelConditionalFormattingConstants.Nodes.Cfvo,
            };

            //Check if the parent does not exists
            if (itemElementNode == null)
            {
                // Get the parent node path by the rule type
                string parentNodePath = ExcelConditionalFormattingValueObjectType.GetParentPathByRuleType(
                    ruleType);

                // Check for en error (rule type does not have <cfvo>)
                if (parentNodePath == string.Empty)
                {
                    throw new Exception(
                              ExcelConditionalFormattingConstants.Errors.MissingCfvoParentNode);
                }
            }
            RuleType = ruleType;
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="position"></param>
        ///<param name="ruleType"></param>
        /// <param name="topNode"></param>
        /// <param name="nameSpaceManager"></param>
        /// <returns></returns>
        public static XmlNode GetCfvoNodeByPosition(
            eExcelConditionalFormattingValueObjectPosition position,
            eExcelConditionalFormattingRuleType ruleType,
            XmlNode topNode,
            XmlNamespaceManager nameSpaceManager)
        {
            // Get the corresponding <cfvo> node (by the position)
            var node = topNode.SelectSingleNode(
                string.Format(
                    "{0}[position()={1}]",
                    // {0}
                    ExcelConditionalFormattingConstants.Paths.Cfvo,
                    // {1}
                    ExcelConditionalFormattingValueObjectType.GetOrderByPosition(position, ruleType)),
                nameSpaceManager);

            if (node == null)
            {
                throw new Exception(
                          ExcelConditionalFormattingConstants.Errors.MissingCfvoNode);
            }

            return(node);
        }
コード例 #4
0
        /****************************************************************************************/

        #region Constructors
        /// <summary>
        /// Initialize the cfvo (§18.3.1.11) node
        /// </summary>
        /// <param name="type"></param>
        /// <param name="value"></param>
        /// <param name="formula"></param>
        /// <param name="ruleType"></param>
        /// <param name="address"></param>
        /// <param name="priority"></param>
        /// <param name="worksheet"></param>
        /// <param name="itemElementNode">The cfvo (§18.3.1.11) node parent. Can be any of the following:
        /// colorScale (§18.3.1.16); dataBar (§18.3.1.28); iconSet (§18.3.1.49)</param>
        /// <param name="namespaceManager"></param>
        internal ExcelConditionalFormattingIconDataBarValue(
            eExcelConditionalFormattingValueObjectType type,
            double value,
            string formula,
            eExcelConditionalFormattingRuleType ruleType,
            ExcelAddress address,
            int priority,
            ExcelWorksheet worksheet,
            XmlNode itemElementNode,
            XmlNamespaceManager namespaceManager)
            : this(
                ruleType,
                address,
                worksheet,
                itemElementNode,
                namespaceManager)
        {
            Require.Argument(priority).IsInRange(1, int.MaxValue, "priority");

            // Check if the parent does not exists
            if (itemElementNode == null)
            {
                // Get the parent node path by the rule type
                string parentNodePath = ExcelConditionalFormattingValueObjectType.GetParentPathByRuleType(
                    ruleType);

                // Check for en error (rule type does not have <cfvo>)
                if (parentNodePath == string.Empty)
                {
                    throw new Exception(
                              ExcelConditionalFormattingConstants.Errors.MissingCfvoParentNode);
                }

                // Point to the <cfvo> parent node
                itemElementNode = _worksheet.WorksheetXml.SelectSingleNode(
                    string.Format(
                        "//{0}[{1}='{2}']/{3}[{4}='{5}']/{6}",
                        // {0}
                        ExcelConditionalFormattingConstants.Paths.ConditionalFormatting,
                        // {1}
                        ExcelConditionalFormattingConstants.Paths.SqrefAttribute,
                        // {2}
                        address.Address,
                        // {3}
                        ExcelConditionalFormattingConstants.Paths.CfRule,
                        // {4}
                        ExcelConditionalFormattingConstants.Paths.PriorityAttribute,
                        // {5}
                        priority,
                        // {6}
                        parentNodePath),
                    _worksheet.NameSpaceManager);

                // Check for en error (rule type does not have <cfvo>)
                if (itemElementNode == null)
                {
                    throw new Exception(
                              ExcelConditionalFormattingConstants.Errors.MissingCfvoParentNode);
                }
            }

            TopNode = itemElementNode;

            // Save the attributes
            RuleType = ruleType;
            Type     = type;
            Value    = value;
            Formula  = formula;
        }
コード例 #5
0
        /****************************************************************************************/

        #region Constructors
        /// <summary>
        /// Initialize the cfvo (§18.3.1.11) node
        /// </summary>
        /// <param name="position"></param>
        /// <param name="type"></param>
        /// <param name="color"></param>
        /// <param name="value"></param>
        /// <param name="formula"></param>
        /// <param name="ruleType"></param>
        /// <param name="address"></param>
        /// <param name="priority"></param>
        /// <param name="worksheet"></param>
        /// <param name="itemElementNode">The cfvo (§18.3.1.11) node parent. Can be any of the following:
        /// colorScale (§18.3.1.16); dataBar (§18.3.1.28); iconSet (§18.3.1.49)</param>
        /// <param name="namespaceManager"></param>
        internal ExcelConditionalFormattingColorScaleValue(
            eExcelConditionalFormattingValueObjectPosition position,
            eExcelConditionalFormattingValueObjectType type,
            Color color,
            double value,
            string formula,
            eExcelConditionalFormattingRuleType ruleType,
            ExcelAddress address,
            int priority,
            ExcelWorksheet worksheet,
            XmlNode itemElementNode,
            XmlNamespaceManager namespaceManager)
            : base(
                namespaceManager,
                itemElementNode)
        {
            Require.Argument(priority).IsInRange(1, int.MaxValue, "priority");
            Require.Argument(address).IsNotNull("address");
            Require.Argument(worksheet).IsNotNull("worksheet");

            // Save the worksheet for private methods to use
            _worksheet = worksheet;

            // Schema order list
            SchemaNodeOrder = new string[]
            {
                ExcelConditionalFormattingConstants.Nodes.Cfvo,
                ExcelConditionalFormattingConstants.Nodes.Color
            };

            // Check if the parent does not exists
            if (itemElementNode == null)
            {
                // Get the parent node path by the rule type
                string parentNodePath = ExcelConditionalFormattingValueObjectType.GetParentPathByRuleType(
                    ruleType);

                // Check for en error (rule type does not have <cfvo>)
                if (parentNodePath == string.Empty)
                {
                    throw new Exception(
                              ExcelConditionalFormattingConstants.Errors.MissingCfvoParentNode);
                }

                // Point to the <cfvo> parent node
                itemElementNode = _worksheet.WorksheetXml.SelectSingleNode(
                    string.Format(
                        "//{0}[{1}='{2}']/{3}[{4}='{5}']/{6}",
                        // {0}
                        ExcelConditionalFormattingConstants.Paths.ConditionalFormatting,
                        // {1}
                        ExcelConditionalFormattingConstants.Paths.SqrefAttribute,
                        // {2}
                        address.Address,
                        // {3}
                        ExcelConditionalFormattingConstants.Paths.CfRule,
                        // {4}
                        ExcelConditionalFormattingConstants.Paths.PriorityAttribute,
                        // {5}
                        priority,
                        // {6}
                        parentNodePath),
                    _worksheet.NameSpaceManager);

                // Check for en error (rule type does not have <cfvo>)
                if (itemElementNode == null)
                {
                    throw new Exception(
                              ExcelConditionalFormattingConstants.Errors.MissingCfvoParentNode);
                }
            }

            // Point to the <cfvo> parent node (<colorScale>, <dataBar> or <iconSet>)
            // This is different than normal, as TopNode does not point to the node itself but to
            // its PARENT. Later, in the CreateNodeByOrdem method the TopNode will be updated.
            TopNode = itemElementNode;

            // Save the attributes
            Position = position;
            RuleType = ruleType;
            Type     = type;
            Color    = color;
            Value    = value;
            Formula  = formula;
        }
コード例 #6
0
        /****************************************************************************************/

        #region Methods
        /// <summary>
        /// Get the node order (1, 2 ou 3) according to the Position (Low, Middle and High)
        /// and the Rule Type (TwoColorScale ou ThreeColorScale).
        /// </summary>
        /// <returns></returns>
        private int GetNodeOrder()
        {
            return(ExcelConditionalFormattingValueObjectType.GetOrderByPosition(
                       Position,
                       RuleType));
        }