/// <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; }
/****************************************************************************************/ #region Constructors /// <summary> /// Initialize the <see cref="ExcelConditionalFormattingRule"/> /// </summary> /// <param name="type"></param> /// <param name="address"></param> /// <param name="priority">Used also as the cfRule unique key</param> /// <param name="worksheet"></param> /// <param name="itemElementNode"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingRule( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode, XmlNamespaceManager namespaceManager) : base( namespaceManager, itemElementNode) { Require.Argument(address).IsNotNull("address"); // While MSDN states that 1 is the "highest priority," it also defines this // field as W3C XML Schema int, which would allow values less than 1. Excel // itself will, on occasion, use a value of 0, so this check will allow a 0. Require.Argument(priority).IsInRange(0, int.MaxValue, "priority"); Require.Argument(worksheet).IsNotNull("worksheet"); _type = type; _worksheet = worksheet; SchemaNodeOrder = _worksheet.SchemaNodeOrder; if (itemElementNode == null) { // Create/Get the <cfRule> inside <conditionalFormatting> itemElementNode = CreateComplexNode( _worksheet.WorksheetXml.DocumentElement, string.Format( "{0}[{1}='{2}']/{1}='{2}'/{3}[{4}='{5}']/{4}='{5}'", //{0} ExcelConditionalFormattingConstants.Paths.ConditionalFormatting, // {1} ExcelConditionalFormattingConstants.Paths.SqrefAttribute, // {2} address.AddressSpaceSeparated, //CF node don't what to have comma between multi addresses, use space instead. // {3} ExcelConditionalFormattingConstants.Paths.CfRule, //{4} ExcelConditionalFormattingConstants.Paths.PriorityAttribute, //{5} priority)); } // Point to <cfRule> TopNode = itemElementNode; Address = address; Priority = priority; Type = type; if (DxfId >= 0) { worksheet.Workbook.Styles.Dxfs[DxfId].AllowChange = true; //This Id is referenced by CF, so we can use it when we save. _style = worksheet.Workbook.Styles.Dxfs[DxfId].Clone(); //Clone, so it can be altered without effecting other dxf styles } }
/// <summary> /// Initialize the <see cref="ExcelConditionalFormattingRule"/> /// </summary> /// <param name="type"></param> /// <param name="address"></param> /// <param name="priority">Used also as the cfRule unique key</param> /// <param name="worksheet"></param> /// <param name="itemElementNode"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingRule( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode, XmlNamespaceManager namespaceManager) : base(namespaceManager, itemElementNode) { Require.Argument(address).IsNotNull("address"); Require.Argument(priority).IsInRange(1, int.MaxValue, "priority"); Require.Argument(worksheet).IsNotNull("worksheet"); _type = type; _worksheet = worksheet; SchemaNodeOrder = _worksheet.SchemaNodeOrder; if (itemElementNode == null) { // Create/Get the <cfRule> inside <conditionalFormatting> itemElementNode = CreateComplexNode( _worksheet.WorksheetXml.DocumentElement, string.Format( "{0}[{1}='{2}']/{1}='{2}'/{3}[{4}='{5}']/{4}='{5}'", //{0} ExcelConditionalFormattingConstants.Paths.ConditionalFormatting, // {1} ExcelConditionalFormattingConstants.Paths.SqrefAttribute, // {2} address.Address, // {3} ExcelConditionalFormattingConstants.Paths.CfRule, //{4} ExcelConditionalFormattingConstants.Paths.PriorityAttribute, //{5} priority)); } // Point to <cfRule> TopNode = itemElementNode; Address = address; Priority = priority; Type = type; if (DxfId >= 0) { worksheet.Workbook.Styles.Dxfs[DxfId].AllowChange = true; //This Id is referenced by CF, so we can use it when we save. _style = worksheet.Workbook.Styles.Dxfs[DxfId].Clone(); //Clone, so it can be altered without effecting other dxf styles } }
/// <summary> /// /// </summary> /// <param name="type"></param> /// <param name="priority"></param> /// <param name="address"></param> /// <param name="worksheet"></param> /// <param name="itemElementNode"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingTimePeriodGroup( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode, XmlNamespaceManager namespaceManager) : base(type, address, priority, worksheet, itemElementNode, (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) { }
/// <summary> /// /// </summary> /// <param name="type"></param> /// <param name="priority"></param> /// <param name="address"></param> /// <param name="worksheet"></param> /// <param name="itemElementNode"></param> internal ExcelConditionalFormattingTimePeriodGroup( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode) : this( type, address, priority, worksheet, itemElementNode, null) { }
/// <summary> /// Initialize the <see cref="ExcelConditionalFormattingRule"/> /// </summary> /// <param name="type"></param> /// <param name="address"></param> /// <param name="priority"></param> /// <param name="worksheet"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingRule( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNamespaceManager namespaceManager) : this( type, address, priority, worksheet, null, namespaceManager) { }
/// <summary> /// /// </summary> /// <param name="type"></param> /// <param name="priority"></param> /// <param name="address"></param> /// <param name="worksheet"></param> /// <param name="itemElementNode"></param> internal ExcelConditionalFormattingTimePeriodGroup( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode) : this( type, address, priority, worksheet, itemElementNode, null) { }
/****************************************************************************************/ #region Constructors /// <summary> /// /// </summary> /// <param name="type"></param> /// <param name="priority"></param> /// <param name="address"></param> /// <param name="worksheet"></param> /// <param name="itemElementNode"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingTimePeriodGroup( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode, XmlNamespaceManager namespaceManager) : base( type, address, priority, worksheet, itemElementNode, (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) { }
/// <summary> /// Initialize the <see cref="ExcelConditionalFormattingColorScaleValue"/> /// </summary> /// <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 ExcelConditionalFormattingIconDataBarValue( eExcelConditionalFormattingValueObjectType type, Color color, eExcelConditionalFormattingRuleType ruleType, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNamespaceManager namespaceManager) : this( type, 0, null, ruleType, address, priority, worksheet, null, namespaceManager) { }
/// <summary> /// Get the cfvo (§18.3.1.11) node parent by the rule type. Can be any of the following: /// "colorScale" (§18.3.1.16); "dataBar" (§18.3.1.28); "iconSet" (§18.3.1.49) /// </summary> /// <param name="ruleType"></param> /// <returns></returns> public static string GetParentPathByRuleType( eExcelConditionalFormattingRuleType ruleType) { switch (ruleType) { case eExcelConditionalFormattingRuleType.TwoColorScale: case eExcelConditionalFormattingRuleType.ThreeColorScale: return(ExcelConditionalFormattingConstants.Paths.ColorScale); case eExcelConditionalFormattingRuleType.ThreeIconSet: case eExcelConditionalFormattingRuleType.FourIconSet: case eExcelConditionalFormattingRuleType.FiveIconSet: return(ExcelConditionalFormattingConstants.Paths.IconSet); case eExcelConditionalFormattingRuleType.DataBar: return(ExcelConditionalFormattingConstants.Paths.DataBar); } return(string.Empty); }
/// <summary> /// Initialize the <see cref="ExcelConditionalFormattingColorScaleValue"/> /// </summary> /// <param name="type"></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 ExcelConditionalFormattingIconDataBarValue( eExcelConditionalFormattingValueObjectType type, double value, string formula, eExcelConditionalFormattingRuleType ruleType, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNamespaceManager namespaceManager) : this( type, value, formula, ruleType, address, priority, worksheet, null, namespaceManager) { }
/// <summary> /// Return cfvo §18.3.1.11 parent according to the rule type /// </summary> /// <param name="type"></param> /// <returns></returns> public static string GetCfvoParentPathByType( eExcelConditionalFormattingRuleType type) { switch (type) { case eExcelConditionalFormattingRuleType.TwoColorScale: case eExcelConditionalFormattingRuleType.ThreeColorScale: return(ExcelConditionalFormattingConstants.Paths.ColorScale); case eExcelConditionalFormattingRuleType.ThreeIconSet: case eExcelConditionalFormattingRuleType.FourIconSet: case eExcelConditionalFormattingRuleType.FiveIconSet: return(ExcelConditionalFormattingConstants.RuleType.IconSet); case eExcelConditionalFormattingRuleType.DataBar: return(ExcelConditionalFormattingConstants.RuleType.DataBar); } throw new Exception( ExcelConditionalFormattingConstants.Errors.MissingRuleType); }
/// <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; }
/// <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) { }
/****************************************************************************************/ #region Conditional Formatting Rules /// <summary> /// Add rule (internal) /// </summary> /// <param name="type"></param> /// <param name="address"></param> /// <returns></returns>F internal IExcelConditionalFormattingRule AddRule( eExcelConditionalFormattingRuleType type, ExcelAddress address) { Require.Argument(address).IsNotNull("address"); address = ValidateAddress(address); EnsureRootElementExists(); // Create the Rule according to the correct type, address and priority IExcelConditionalFormattingRule cfRule = ExcelConditionalFormattingRuleFactory.Create( type, address, GetNextPriority(), _worksheet, null); // Add the newly created rule to the list _rules.Add(cfRule); // Return the newly created rule return(cfRule); }
/// <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); }
public static ExcelConditionalFormattingRule Create( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode) { Require.Argument(type); Require.Argument(address).IsNotNull("address"); // While MSDN states that 1 is the "highest priority," it also defines this // field as W3C XML Schema int, which would allow values less than 1. Excel // itself will, on occasion, use a value of 0, so this check will allow a 0. Require.Argument(priority).IsInRange(0, int.MaxValue, "priority"); Require.Argument(worksheet).IsNotNull("worksheet"); // According the conditional formatting rule type switch (type) { case eExcelConditionalFormattingRuleType.AboveAverage: return new ExcelConditionalFormattingAboveAverage( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.AboveOrEqualAverage: return new ExcelConditionalFormattingAboveOrEqualAverage( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.BelowAverage: return new ExcelConditionalFormattingBelowAverage( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.BelowOrEqualAverage: return new ExcelConditionalFormattingBelowOrEqualAverage( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.AboveStdDev: return new ExcelConditionalFormattingAboveStdDev( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.BelowStdDev: return new ExcelConditionalFormattingBelowStdDev( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Bottom: return new ExcelConditionalFormattingBottom( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.BottomPercent: return new ExcelConditionalFormattingBottomPercent( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Top: return new ExcelConditionalFormattingTop( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.TopPercent: return new ExcelConditionalFormattingTopPercent( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Last7Days: return new ExcelConditionalFormattingLast7Days( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.LastMonth: return new ExcelConditionalFormattingLastMonth( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.LastWeek: return new ExcelConditionalFormattingLastWeek( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NextMonth: return new ExcelConditionalFormattingNextMonth( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NextWeek: return new ExcelConditionalFormattingNextWeek( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ThisMonth: return new ExcelConditionalFormattingThisMonth( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ThisWeek: return new ExcelConditionalFormattingThisWeek( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Today: return new ExcelConditionalFormattingToday( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Tomorrow: return new ExcelConditionalFormattingTomorrow( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Yesterday: return new ExcelConditionalFormattingYesterday( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.BeginsWith: return new ExcelConditionalFormattingBeginsWith( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Between: return new ExcelConditionalFormattingBetween( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ContainsBlanks: return new ExcelConditionalFormattingContainsBlanks( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ContainsErrors: return new ExcelConditionalFormattingContainsErrors( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ContainsText: return new ExcelConditionalFormattingContainsText( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.DuplicateValues: return new ExcelConditionalFormattingDuplicateValues( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.EndsWith: return new ExcelConditionalFormattingEndsWith( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Equal: return new ExcelConditionalFormattingEqual( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Expression: return new ExcelConditionalFormattingExpression( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.GreaterThan: return new ExcelConditionalFormattingGreaterThan( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.GreaterThanOrEqual: return new ExcelConditionalFormattingGreaterThanOrEqual( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.LessThan: return new ExcelConditionalFormattingLessThan( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.LessThanOrEqual: return new ExcelConditionalFormattingLessThanOrEqual( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NotBetween: return new ExcelConditionalFormattingNotBetween( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NotContainsBlanks: return new ExcelConditionalFormattingNotContainsBlanks( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NotContainsErrors: return new ExcelConditionalFormattingNotContainsErrors( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NotContainsText: return new ExcelConditionalFormattingNotContainsText( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NotEqual: return new ExcelConditionalFormattingNotEqual( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.UniqueValues: return new ExcelConditionalFormattingUniqueValues( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ThreeColorScale: return new ExcelConditionalFormattingThreeColorScale( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.TwoColorScale: return new ExcelConditionalFormattingTwoColorScale( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ThreeIconSet: return new ExcelConditionalFormattingThreeIconSet( address, priority, worksheet, itemElementNode, null); case eExcelConditionalFormattingRuleType.FourIconSet: return new ExcelConditionalFormattingFourIconSet( address, priority, worksheet, itemElementNode, null); case eExcelConditionalFormattingRuleType.FiveIconSet: return new ExcelConditionalFormattingFiveIconSet( address, priority, worksheet, itemElementNode, null); case eExcelConditionalFormattingRuleType.DataBar: return new ExcelConditionalFormattingDataBar( eExcelConditionalFormattingRuleType.DataBar, address, priority, worksheet, itemElementNode, null); //TODO: Add DataBar } throw new InvalidOperationException( string.Format( ExcelConditionalFormattingConstants.Errors.NonSupportedRuleType, type.ToString())); }
/****************************************************************************************/ #region Private Properties #endregion Private Properties /****************************************************************************************/ #region Constructors /// <summary> /// /// </summary> /// <param name="type"></param> /// <param name="priority"></param> /// <param name="address"></param> /// <param name="worksheet"></param> /// <param name="itemElementNode"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingDataBar( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode, XmlNamespaceManager namespaceManager) : base( type, address, priority, worksheet, itemElementNode, (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) { SchemaNodeOrder = new string[] { "cfvo", "color" }; //Create the <dataBar> node inside the <cfRule> node if (itemElementNode!=null && itemElementNode.HasChildNodes) { bool high=false; foreach (XmlNode node in itemElementNode.SelectNodes("d:dataBar/d:cfvo", NameSpaceManager)) { if (high == false) { LowValue = new ExcelConditionalFormattingIconDataBarValue( type, address, worksheet, node, namespaceManager); high = true; } else { HighValue = new ExcelConditionalFormattingIconDataBarValue( type, address, worksheet, node, namespaceManager); } } } else { var iconSetNode = CreateComplexNode( Node, ExcelConditionalFormattingConstants.Paths.DataBar); var lowNode = iconSetNode.OwnerDocument.CreateElement(ExcelConditionalFormattingConstants.Paths.Cfvo, ExcelPackage.schemaMain); iconSetNode.AppendChild(lowNode); LowValue = new ExcelConditionalFormattingIconDataBarValue(eExcelConditionalFormattingValueObjectType.Min, 0, "", eExcelConditionalFormattingRuleType.DataBar, address, priority, worksheet, lowNode, namespaceManager); var highNode = iconSetNode.OwnerDocument.CreateElement(ExcelConditionalFormattingConstants.Paths.Cfvo, ExcelPackage.schemaMain); iconSetNode.AppendChild(highNode); HighValue = new ExcelConditionalFormattingIconDataBarValue(eExcelConditionalFormattingValueObjectType.Max, 0, "", eExcelConditionalFormattingRuleType.DataBar, address, priority, worksheet, highNode, namespaceManager); } Type = type; }
/// <summary> /// /// </summary> /// <param name="type"></param> /// <param name="address"></param> /// <param name="priority"></param> /// <param name="worksheet"></param> internal ExcelConditionalFormattingTimePeriodGroup( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet) : this( type, address, priority, worksheet, null, null) { }
/// <summary> /// Initialize the <see cref="ExcelConditionalFormattingRule"/> /// </summary> /// <param name="type"></param> /// <param name="address"></param> /// <param name="priority"></param> /// <param name="worksheet"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingRule( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNamespaceManager namespaceManager) : this( type, address, priority, worksheet, null, namespaceManager) { }
public static ExcelConditionalFormattingRule Create( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode) { Require.Argument(type); Require.Argument(address).IsNotNull("address"); Require.Argument(priority).IsInRange(1, int.MaxValue, "priority"); Require.Argument(worksheet).IsNotNull("worksheet"); // According the conditional formatting rule type switch (type) { case eExcelConditionalFormattingRuleType.AboveAverage: return new ExcelConditionalFormattingAboveAverage( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.AboveOrEqualAverage: return new ExcelConditionalFormattingAboveOrEqualAverage( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.BelowAverage: return new ExcelConditionalFormattingBelowAverage( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.BelowOrEqualAverage: return new ExcelConditionalFormattingBelowOrEqualAverage( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.AboveStdDev: return new ExcelConditionalFormattingAboveStdDev( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.BelowStdDev: return new ExcelConditionalFormattingBelowStdDev( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Bottom: return new ExcelConditionalFormattingBottom( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.BottomPercent: return new ExcelConditionalFormattingBottomPercent( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Top: return new ExcelConditionalFormattingTop( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.TopPercent: return new ExcelConditionalFormattingTopPercent( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Last7Days: return new ExcelConditionalFormattingLast7Days( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.LastMonth: return new ExcelConditionalFormattingLastMonth( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.LastWeek: return new ExcelConditionalFormattingLastWeek( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NextMonth: return new ExcelConditionalFormattingNextMonth( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NextWeek: return new ExcelConditionalFormattingNextWeek( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ThisMonth: return new ExcelConditionalFormattingThisMonth( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ThisWeek: return new ExcelConditionalFormattingThisWeek( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Today: return new ExcelConditionalFormattingToday( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Tomorrow: return new ExcelConditionalFormattingTomorrow( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Yesterday: return new ExcelConditionalFormattingYesterday( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.BeginsWith: return new ExcelConditionalFormattingBeginsWith( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Between: return new ExcelConditionalFormattingBetween( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ContainsBlanks: return new ExcelConditionalFormattingContainsBlanks( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ContainsErrors: return new ExcelConditionalFormattingContainsErrors( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ContainsText: return new ExcelConditionalFormattingContainsText( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.DuplicateValues: return new ExcelConditionalFormattingDuplicateValues( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.EndsWith: return new ExcelConditionalFormattingEndsWith( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Equal: return new ExcelConditionalFormattingEqual( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.Expression: return new ExcelConditionalFormattingExpression( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.GreaterThan: return new ExcelConditionalFormattingGreaterThan( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.GreaterThanOrEqual: return new ExcelConditionalFormattingGreaterThanOrEqual( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.LessThan: return new ExcelConditionalFormattingLessThan( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.LessThanOrEqual: return new ExcelConditionalFormattingLessThanOrEqual( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NotBetween: return new ExcelConditionalFormattingNotBetween( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NotContainsBlanks: return new ExcelConditionalFormattingNotContainsBlanks( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NotContainsErrors: return new ExcelConditionalFormattingNotContainsErrors( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NotContainsText: return new ExcelConditionalFormattingNotContainsText( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.NotEqual: return new ExcelConditionalFormattingNotEqual( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.UniqueValues: return new ExcelConditionalFormattingUniqueValues( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.ThreeColorScale: return new ExcelConditionalFormattingThreeColorScale( address, priority, worksheet, itemElementNode); case eExcelConditionalFormattingRuleType.TwoColorScale: return new ExcelConditionalFormattingTwoColorScale( address, priority, worksheet, itemElementNode); //TODO: Add DataBar and IconSet } throw new InvalidOperationException( string.Format( ExcelConditionalFormattingConstants.Errors.NonSupportedRuleType, type.ToString())); }
/****************************************************************************************/ #region Private Properties #endregion Private Properties /****************************************************************************************/ #region Constructors /// <summary> /// /// </summary> /// <param name="type"></param> /// <param name="priority"></param> /// <param name="address"></param> /// <param name="worksheet"></param> /// <param name="itemElementNode"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingDataBar( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode, XmlNamespaceManager namespaceManager) : base( type, address, priority, worksheet, itemElementNode, (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) { SchemaNodeOrder = new string[] { "cfvo", "color" }; //Create the <dataBar> node inside the <cfRule> node if (itemElementNode != null && itemElementNode.HasChildNodes) { bool high = false; foreach (XmlNode node in itemElementNode.SelectNodes("d:dataBar/d:cfvo", NameSpaceManager)) { if (high == false) { LowValue = new ExcelConditionalFormattingIconDataBarValue( type, address, worksheet, node, namespaceManager); high = true; } else { HighValue = new ExcelConditionalFormattingIconDataBarValue( type, address, worksheet, node, namespaceManager); } } } else { var iconSetNode = CreateComplexNode( Node, ExcelConditionalFormattingConstants.Paths.DataBar); var lowNode = iconSetNode.OwnerDocument.CreateElement(ExcelConditionalFormattingConstants.Paths.Cfvo, ExcelPackage.schemaMain); iconSetNode.AppendChild(lowNode); LowValue = new ExcelConditionalFormattingIconDataBarValue(eExcelConditionalFormattingValueObjectType.Min, 0, "", eExcelConditionalFormattingRuleType.DataBar, address, priority, worksheet, lowNode, namespaceManager); var highNode = iconSetNode.OwnerDocument.CreateElement(ExcelConditionalFormattingConstants.Paths.Cfvo, ExcelPackage.schemaMain); iconSetNode.AppendChild(highNode); HighValue = new ExcelConditionalFormattingIconDataBarValue(eExcelConditionalFormattingValueObjectType.Max, 0, "", eExcelConditionalFormattingRuleType.DataBar, address, priority, worksheet, highNode, namespaceManager); } Type = type; }
/// <summary> /// /// </summary> /// <param name="type"></param> /// <returns></returns> public static string GetAttributeByType( eExcelConditionalFormattingRuleType type) { switch (type) { case eExcelConditionalFormattingRuleType.AboveAverage: case eExcelConditionalFormattingRuleType.AboveOrEqualAverage: case eExcelConditionalFormattingRuleType.BelowAverage: case eExcelConditionalFormattingRuleType.BelowOrEqualAverage: case eExcelConditionalFormattingRuleType.AboveStdDev: case eExcelConditionalFormattingRuleType.BelowStdDev: return(ExcelConditionalFormattingConstants.RuleType.AboveAverage); case eExcelConditionalFormattingRuleType.Bottom: case eExcelConditionalFormattingRuleType.BottomPercent: case eExcelConditionalFormattingRuleType.Top: case eExcelConditionalFormattingRuleType.TopPercent: return(ExcelConditionalFormattingConstants.RuleType.Top10); case eExcelConditionalFormattingRuleType.Last7Days: case eExcelConditionalFormattingRuleType.LastMonth: case eExcelConditionalFormattingRuleType.LastWeek: case eExcelConditionalFormattingRuleType.NextMonth: case eExcelConditionalFormattingRuleType.NextWeek: case eExcelConditionalFormattingRuleType.ThisMonth: case eExcelConditionalFormattingRuleType.ThisWeek: case eExcelConditionalFormattingRuleType.Today: case eExcelConditionalFormattingRuleType.Tomorrow: case eExcelConditionalFormattingRuleType.Yesterday: return(ExcelConditionalFormattingConstants.RuleType.TimePeriod); case eExcelConditionalFormattingRuleType.Between: case eExcelConditionalFormattingRuleType.Equal: case eExcelConditionalFormattingRuleType.GreaterThan: case eExcelConditionalFormattingRuleType.GreaterThanOrEqual: case eExcelConditionalFormattingRuleType.LessThan: case eExcelConditionalFormattingRuleType.LessThanOrEqual: case eExcelConditionalFormattingRuleType.NotBetween: case eExcelConditionalFormattingRuleType.NotEqual: return(ExcelConditionalFormattingConstants.RuleType.CellIs); case eExcelConditionalFormattingRuleType.ThreeIconSet: case eExcelConditionalFormattingRuleType.FourIconSet: case eExcelConditionalFormattingRuleType.FiveIconSet: return(ExcelConditionalFormattingConstants.RuleType.IconSet); case eExcelConditionalFormattingRuleType.ThreeColorScale: case eExcelConditionalFormattingRuleType.TwoColorScale: return(ExcelConditionalFormattingConstants.RuleType.ColorScale); case eExcelConditionalFormattingRuleType.BeginsWith: return(ExcelConditionalFormattingConstants.RuleType.BeginsWith); case eExcelConditionalFormattingRuleType.ContainsBlanks: return(ExcelConditionalFormattingConstants.RuleType.ContainsBlanks); case eExcelConditionalFormattingRuleType.ContainsErrors: return(ExcelConditionalFormattingConstants.RuleType.ContainsErrors); case eExcelConditionalFormattingRuleType.ContainsText: return(ExcelConditionalFormattingConstants.RuleType.ContainsText); case eExcelConditionalFormattingRuleType.DuplicateValues: return(ExcelConditionalFormattingConstants.RuleType.DuplicateValues); case eExcelConditionalFormattingRuleType.EndsWith: return(ExcelConditionalFormattingConstants.RuleType.EndsWith); case eExcelConditionalFormattingRuleType.Expression: return(ExcelConditionalFormattingConstants.RuleType.Expression); case eExcelConditionalFormattingRuleType.NotContainsBlanks: return(ExcelConditionalFormattingConstants.RuleType.NotContainsBlanks); case eExcelConditionalFormattingRuleType.NotContainsErrors: return(ExcelConditionalFormattingConstants.RuleType.NotContainsErrors); case eExcelConditionalFormattingRuleType.NotContainsText: return(ExcelConditionalFormattingConstants.RuleType.NotContainsText); case eExcelConditionalFormattingRuleType.UniqueValues: return(ExcelConditionalFormattingConstants.RuleType.UniqueValues); case eExcelConditionalFormattingRuleType.DataBar: return(ExcelConditionalFormattingConstants.RuleType.DataBar); } throw new Exception( ExcelConditionalFormattingConstants.Errors.MissingRuleType); }
/// <summary> /// /// </summary> /// <param name="type"></param> /// <returns></returns> public static string GetAttributeByType( eExcelConditionalFormattingRuleType type) { switch (type) { case eExcelConditionalFormattingRuleType.AboveAverage: case eExcelConditionalFormattingRuleType.AboveOrEqualAverage: case eExcelConditionalFormattingRuleType.BelowAverage: case eExcelConditionalFormattingRuleType.BelowOrEqualAverage: case eExcelConditionalFormattingRuleType.AboveStdDev: case eExcelConditionalFormattingRuleType.BelowStdDev: return ExcelConditionalFormattingConstants.RuleType.AboveAverage; case eExcelConditionalFormattingRuleType.Bottom: case eExcelConditionalFormattingRuleType.BottomPercent: case eExcelConditionalFormattingRuleType.Top: case eExcelConditionalFormattingRuleType.TopPercent: return ExcelConditionalFormattingConstants.RuleType.Top10; case eExcelConditionalFormattingRuleType.Last7Days: case eExcelConditionalFormattingRuleType.LastMonth: case eExcelConditionalFormattingRuleType.LastWeek: case eExcelConditionalFormattingRuleType.NextMonth: case eExcelConditionalFormattingRuleType.NextWeek: case eExcelConditionalFormattingRuleType.ThisMonth: case eExcelConditionalFormattingRuleType.ThisWeek: case eExcelConditionalFormattingRuleType.Today: case eExcelConditionalFormattingRuleType.Tomorrow: case eExcelConditionalFormattingRuleType.Yesterday: return ExcelConditionalFormattingConstants.RuleType.TimePeriod; case eExcelConditionalFormattingRuleType.Between: case eExcelConditionalFormattingRuleType.Equal: case eExcelConditionalFormattingRuleType.GreaterThan: case eExcelConditionalFormattingRuleType.GreaterThanOrEqual: case eExcelConditionalFormattingRuleType.LessThan: case eExcelConditionalFormattingRuleType.LessThanOrEqual: case eExcelConditionalFormattingRuleType.NotBetween: case eExcelConditionalFormattingRuleType.NotEqual: return ExcelConditionalFormattingConstants.RuleType.CellIs; case eExcelConditionalFormattingRuleType.ThreeIconSet: case eExcelConditionalFormattingRuleType.FourIconSet: case eExcelConditionalFormattingRuleType.FiveIconSet: return ExcelConditionalFormattingConstants.RuleType.IconSet; case eExcelConditionalFormattingRuleType.ThreeColorScale: case eExcelConditionalFormattingRuleType.TwoColorScale: return ExcelConditionalFormattingConstants.RuleType.ColorScale; case eExcelConditionalFormattingRuleType.BeginsWith: return ExcelConditionalFormattingConstants.RuleType.BeginsWith; case eExcelConditionalFormattingRuleType.ContainsBlanks: return ExcelConditionalFormattingConstants.RuleType.ContainsBlanks; case eExcelConditionalFormattingRuleType.ContainsErrors: return ExcelConditionalFormattingConstants.RuleType.ContainsErrors; case eExcelConditionalFormattingRuleType.ContainsText: return ExcelConditionalFormattingConstants.RuleType.ContainsText; case eExcelConditionalFormattingRuleType.DuplicateValues: return ExcelConditionalFormattingConstants.RuleType.DuplicateValues; case eExcelConditionalFormattingRuleType.EndsWith: return ExcelConditionalFormattingConstants.RuleType.EndsWith; case eExcelConditionalFormattingRuleType.Expression: return ExcelConditionalFormattingConstants.RuleType.Expression; case eExcelConditionalFormattingRuleType.NotContainsBlanks: return ExcelConditionalFormattingConstants.RuleType.NotContainsBlanks; case eExcelConditionalFormattingRuleType.NotContainsErrors: return ExcelConditionalFormattingConstants.RuleType.NotContainsErrors; case eExcelConditionalFormattingRuleType.NotContainsText: return ExcelConditionalFormattingConstants.RuleType.NotContainsText; case eExcelConditionalFormattingRuleType.UniqueValues: return ExcelConditionalFormattingConstants.RuleType.UniqueValues; case eExcelConditionalFormattingRuleType.DataBar: return ExcelConditionalFormattingConstants.RuleType.DataBar; } throw new Exception( ExcelConditionalFormattingConstants.Errors.MissingRuleType); }
/// <summary> /// Get the cfvo (§18.3.1.11) node parent by the rule type. Can be any of the following: /// "colorScale" (§18.3.1.16); "dataBar" (§18.3.1.28); "iconSet" (§18.3.1.49) /// </summary> /// <param name="ruleType"></param> /// <returns></returns> public static string GetParentPathByRuleType( eExcelConditionalFormattingRuleType ruleType) { switch (ruleType) { case eExcelConditionalFormattingRuleType.TwoColorScale: case eExcelConditionalFormattingRuleType.ThreeColorScale: return ExcelConditionalFormattingConstants.Paths.ColorScale; case eExcelConditionalFormattingRuleType.ThreeIconSet: case eExcelConditionalFormattingRuleType.FourIconSet: case eExcelConditionalFormattingRuleType.FiveIconSet: return ExcelConditionalFormattingConstants.Paths.IconSet; case eExcelConditionalFormattingRuleType.DataBar: return ExcelConditionalFormattingConstants.Paths.DataBar; } return string.Empty; }
/// <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; }
/****************************************************************************************/ #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; }
/// <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; }
public static ExcelConditionalFormattingRule Create( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode) { Require.Argument(type); Require.Argument(address).IsNotNull("address"); Require.Argument(priority).IsInRange(0, int.MaxValue, "priority"); Require.Argument(worksheet).IsNotNull("worksheet"); // According the conditional formatting rule type switch (type) { case eExcelConditionalFormattingRuleType.AboveAverage: return(new ExcelConditionalFormattingAboveAverage( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.AboveOrEqualAverage: return(new ExcelConditionalFormattingAboveOrEqualAverage( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.BelowAverage: return(new ExcelConditionalFormattingBelowAverage( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.BelowOrEqualAverage: return(new ExcelConditionalFormattingBelowOrEqualAverage( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.AboveStdDev: return(new ExcelConditionalFormattingAboveStdDev( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.BelowStdDev: return(new ExcelConditionalFormattingBelowStdDev( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.Bottom: return(new ExcelConditionalFormattingBottom( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.BottomPercent: return(new ExcelConditionalFormattingBottomPercent( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.Top: return(new ExcelConditionalFormattingTop( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.TopPercent: return(new ExcelConditionalFormattingTopPercent( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.Last7Days: return(new ExcelConditionalFormattingLast7Days( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.LastMonth: return(new ExcelConditionalFormattingLastMonth( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.LastWeek: return(new ExcelConditionalFormattingLastWeek( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.NextMonth: return(new ExcelConditionalFormattingNextMonth( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.NextWeek: return(new ExcelConditionalFormattingNextWeek( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.ThisMonth: return(new ExcelConditionalFormattingThisMonth( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.ThisWeek: return(new ExcelConditionalFormattingThisWeek( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.Today: return(new ExcelConditionalFormattingToday( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.Tomorrow: return(new ExcelConditionalFormattingTomorrow( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.Yesterday: return(new ExcelConditionalFormattingYesterday( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.BeginsWith: return(new ExcelConditionalFormattingBeginsWith( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.Between: return(new ExcelConditionalFormattingBetween( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.ContainsBlanks: return(new ExcelConditionalFormattingContainsBlanks( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.ContainsErrors: return(new ExcelConditionalFormattingContainsErrors( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.ContainsText: return(new ExcelConditionalFormattingContainsText( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.DuplicateValues: return(new ExcelConditionalFormattingDuplicateValues( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.EndsWith: return(new ExcelConditionalFormattingEndsWith( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.Equal: return(new ExcelConditionalFormattingEqual( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.Expression: return(new ExcelConditionalFormattingExpression( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.GreaterThan: return(new ExcelConditionalFormattingGreaterThan( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.GreaterThanOrEqual: return(new ExcelConditionalFormattingGreaterThanOrEqual( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.LessThan: return(new ExcelConditionalFormattingLessThan( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.LessThanOrEqual: return(new ExcelConditionalFormattingLessThanOrEqual( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.NotBetween: return(new ExcelConditionalFormattingNotBetween( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.NotContainsBlanks: return(new ExcelConditionalFormattingNotContainsBlanks( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.NotContainsErrors: return(new ExcelConditionalFormattingNotContainsErrors( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.NotContainsText: return(new ExcelConditionalFormattingNotContainsText( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.NotEqual: return(new ExcelConditionalFormattingNotEqual( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.UniqueValues: return(new ExcelConditionalFormattingUniqueValues( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.ThreeColorScale: return(new ExcelConditionalFormattingThreeColorScale( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.TwoColorScale: return(new ExcelConditionalFormattingTwoColorScale( address, priority, worksheet, itemElementNode)); case eExcelConditionalFormattingRuleType.ThreeIconSet: return(new ExcelConditionalFormattingThreeIconSet( address, priority, worksheet, itemElementNode, null)); case eExcelConditionalFormattingRuleType.FourIconSet: return(new ExcelConditionalFormattingFourIconSet( address, priority, worksheet, itemElementNode, null)); case eExcelConditionalFormattingRuleType.FiveIconSet: return(new ExcelConditionalFormattingFiveIconSet( address, priority, worksheet, itemElementNode, null)); case eExcelConditionalFormattingRuleType.DataBar: return(new ExcelConditionalFormattingDataBar( eExcelConditionalFormattingRuleType.DataBar, address, priority, worksheet, itemElementNode, null)); //TODO: Add DataBar } throw new InvalidOperationException( string.Format( ExcelConditionalFormattingConstants.Errors.NonSupportedRuleType, type.ToString())); }
/// <summary> /// Initialize the <see cref="ExcelConditionalFormattingColorScaleValue"/> /// </summary> /// <param name="type"></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 ExcelConditionalFormattingIconDataBarValue( eExcelConditionalFormattingValueObjectType type, double value, string formula, eExcelConditionalFormattingRuleType ruleType, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNamespaceManager namespaceManager) : this( type, value, formula, ruleType, address, priority, worksheet, null, namespaceManager) { }
/****************************************************************************************/ #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="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 ExcelConditionalFormattingIconDataBarValue( eExcelConditionalFormattingValueObjectType type, Color color, eExcelConditionalFormattingRuleType ruleType, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNamespaceManager namespaceManager) : this( type, 0, null, ruleType, address, priority, worksheet, null, namespaceManager) { }
/// <summary> /// Return cfvo §18.3.1.11 parent according to the rule type /// </summary> /// <param name="type"></param> /// <returns></returns> public static string GetCfvoParentPathByType( eExcelConditionalFormattingRuleType type) { switch (type) { case eExcelConditionalFormattingRuleType.TwoColorScale: case eExcelConditionalFormattingRuleType.ThreeColorScale: return ExcelConditionalFormattingConstants.Paths.ColorScale; case eExcelConditionalFormattingRuleType.ThreeIconSet: case eExcelConditionalFormattingRuleType.FourIconSet: case eExcelConditionalFormattingRuleType.FiveIconSet: return ExcelConditionalFormattingConstants.RuleType.IconSet; case eExcelConditionalFormattingRuleType.DataBar: return ExcelConditionalFormattingConstants.RuleType.DataBar; } throw new Exception( ExcelConditionalFormattingConstants.Errors.MissingRuleType); }
/****************************************************************************************/ #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; }
/// <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) { }
/****************************************************************************************/ #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; }
/****************************************************************************************/ #region Private Properties #endregion Private Properties /****************************************************************************************/ #region Constructors /// <summary> /// /// </summary> /// <param name="type"></param> /// <param name="address"></param> /// <param name="priority"></param> /// <param name="worksheet"></param> /// <param name="itemElementNode"></param> /// <param name="namespaceManager"></param> internal ExcelConditionalFormattingIconSetBase( eExcelConditionalFormattingRuleType type, ExcelAddress address, int priority, ExcelWorksheet worksheet, XmlNode itemElementNode, XmlNamespaceManager namespaceManager) : base( type, address, priority, worksheet, itemElementNode, (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) { if (itemElementNode != null && itemElementNode.HasChildNodes) { int pos = 1; foreach (XmlNode node in itemElementNode.SelectNodes("d:iconSet/d:cfvo", NameSpaceManager)) { if (pos == 1) { Icon1 = new ExcelConditionalFormattingIconDataBarValue( type, address, worksheet, node, namespaceManager); } else if (pos == 2) { Icon2 = new ExcelConditionalFormattingIconDataBarValue( type, address, worksheet, node, namespaceManager); } else if (pos == 3) { Icon3 = new ExcelConditionalFormattingIconDataBarValue( type, address, worksheet, node, namespaceManager); } else { break; } pos++; } } else { var iconSetNode = CreateComplexNode( Node, ExcelConditionalFormattingConstants.Paths.IconSet); //Create the <iconSet> node inside the <cfRule> node double spann; if (type == eExcelConditionalFormattingRuleType.ThreeIconSet) { spann = 3; } else if (type == eExcelConditionalFormattingRuleType.FourIconSet) { spann = 4; } else { spann = 5; } var iconNode1 = iconSetNode.OwnerDocument.CreateElement(ExcelConditionalFormattingConstants.Paths.Cfvo, ExcelPackage.schemaMain); iconSetNode.AppendChild(iconNode1); Icon1 = new ExcelConditionalFormattingIconDataBarValue(eExcelConditionalFormattingValueObjectType.Percent, 0, "", eExcelConditionalFormattingRuleType.ThreeIconSet, address, priority, worksheet, iconNode1, namespaceManager); var iconNode2 = iconSetNode.OwnerDocument.CreateElement(ExcelConditionalFormattingConstants.Paths.Cfvo, ExcelPackage.schemaMain); iconSetNode.AppendChild(iconNode2); Icon2 = new ExcelConditionalFormattingIconDataBarValue(eExcelConditionalFormattingValueObjectType.Percent, Math.Round(100D / spann, 0), "", eExcelConditionalFormattingRuleType.ThreeIconSet, address, priority, worksheet, iconNode2, namespaceManager); var iconNode3 = iconSetNode.OwnerDocument.CreateElement(ExcelConditionalFormattingConstants.Paths.Cfvo, ExcelPackage.schemaMain); iconSetNode.AppendChild(iconNode3); Icon3 = new ExcelConditionalFormattingIconDataBarValue(eExcelConditionalFormattingValueObjectType.Percent, Math.Round(100D * (2D / spann), 0), "", eExcelConditionalFormattingRuleType.ThreeIconSet, address, priority, worksheet, iconNode3, namespaceManager); Type = type; } }
/// <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) { }