/// <summary> /// Get the sequencial order of a cfvo/color by its position. /// </summary> /// <param name="position"></param> /// <param name="ruleType"></param> /// <returns>1, 2 or 3</returns> internal static int GetOrderByPosition( eExcelConditionalFormattingValueObjectPosition position, eExcelConditionalFormattingRuleType ruleType) { switch (position) { case eExcelConditionalFormattingValueObjectPosition.Low: return 1; case eExcelConditionalFormattingValueObjectPosition.Middle: return 2; case eExcelConditionalFormattingValueObjectPosition.High: // Check if the rule type is TwoColorScale. if (ruleType == eExcelConditionalFormattingRuleType.TwoColorScale) { // There are only "Low" and "High". So "High" is the second return 2; } // There are "Low", "Middle" and "High". So "High" is the third return 3; } return 0; }
/// <summary> /// Initialize the <see cref="ExcelConditionalFormattingColorScaleValue"/> /// </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="priority"></param> /// <param name="address"></param> /// <param name="worksheet"></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, XmlNamespaceManager namespaceManager) : this( position, type, color, value, formula, ruleType, address, priority, worksheet, null, namespaceManager) { }
/// <summary> /// Get the sequencial order of a cfvo/color by its position. /// </summary> /// <param name="position"></param> /// <returns>1, 2 or 3</returns> public static int GetOrderByPosition( eExcelConditionalFormattingValueObjectPosition position, eExcelConditionalFormattingRuleType ruleType) { switch (position) { case eExcelConditionalFormattingValueObjectPosition.Low: return(1); case eExcelConditionalFormattingValueObjectPosition.Middle: return(2); case eExcelConditionalFormattingValueObjectPosition.High: // Check if the rule type is TwoColorScale. if (ruleType == eExcelConditionalFormattingRuleType.TwoColorScale) { // There are only "Low" and "High". So "High" is the second return(2); } // There are "Low", "Middle" and "High". So "High" is the third return(3); } return(0); }
/// <summary> /// Initialize the <see cref="ExcelConditionalFormattingValueObject"/> /// </summary> /// <param name="position"></param> /// <param name="type"></param> /// <param name="color"></param> /// <param name="ruleType"></param> /// <param name="priority"></param> /// <param name="address"></param> /// <param name="worksheet"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingValueObject( eExcelConditionalFormattingValueObjectPosition position, eExcelConditionalFormattingValueObjectType type, Color color, eExcelConditionalFormattingRuleType ruleType, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNamespaceManager namespaceManager) : this( position, type, color, 0, null, ruleType, address, priority, worksheet, null, namespaceManager) { }
/// <summary> /// /// </summary> /// <param name="position"></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); }
/****************************************************************************************/ #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; }
/// <summary> /// Initialize the <see cref="ExcelConditionalFormattingColorScaleValue"/> /// </summary> /// <param name="position"></param> /// <param name="type"></param> /// <param name="color"></param> /// <param name="ruleType"></param> /// <param name="priority"></param> /// <param name="address"></param> /// <param name="worksheet"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingColorScaleValue( eExcelConditionalFormattingValueObjectPosition position, eExcelConditionalFormattingValueObjectType type, Color color, eExcelConditionalFormattingRuleType ruleType, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNamespaceManager namespaceManager) : this( position, type, color, 0, null, ruleType, address, priority, worksheet, null, namespaceManager) { }
/// <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; }
/// <summary> /// Initialize the <see cref="ExcelConditionalFormattingValueObject"/> /// </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="priority"></param> /// <param name="address"></param> /// <param name="worksheet"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingValueObject( eExcelConditionalFormattingValueObjectPosition position, eExcelConditionalFormattingValueObjectType type, Color color, double value, string formula, eExcelConditionalFormattingRuleType ruleType, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNamespaceManager namespaceManager) : this(position, type, color, value, formula, ruleType, address, priority, worksheet, null, namespaceManager) { }