blob: 969bcd1200bdee76f5ead9b2459253c6eb0d965d [file] [log] [blame]
/*******************************************************************************
* You may amend and distribute as you like, but don't remove this header!
*
* EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
* See http://www.codeplex.com/EPPlus for details.
*
* Copyright (C) 2011 Jan Källman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
* If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
*
* All code and executables are provided "as is" with no warranty either express or implied.
* The author accepts no liability for any damage or loss of business that this product may cause.
*
* Code change notes:
*
* Author Change Date
* ******************************************************************************
* Eyal Seagull Conditional Formatting 2012-04-03
*******************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using OfficeOpenXml.Utils;
using System.Xml;
using OfficeOpenXml.ConditionalFormatting.Contracts;
using System.Text.RegularExpressions;
using System.Drawing;
namespace OfficeOpenXml.ConditionalFormatting
{
/// <summary>
/// Collection of <see cref="ExcelConditionalFormattingRule"/>.
/// This class is providing the API for EPPlus conditional formatting.
/// </summary>
/// <remarks>
/// <para>
/// The public methods of this class (Add[...]ConditionalFormatting) will create a ConditionalFormatting/CfRule entry in the worksheet. When this
/// Conditional Formatting has been created changes to the properties will affect the workbook immediately.
/// </para>
/// <para>
/// Each type of Conditional Formatting Rule has diferente set of properties.
/// </para>
/// <code>
/// // Add a Three Color Scale conditional formatting
/// var cf = worksheet.ConditionalFormatting.AddThreeColorScale(new ExcelAddress("A1:C10"));
/// // Set the conditional formatting properties
/// cf.LowValue.Type = ExcelConditionalFormattingValueObjectType.Min;
/// cf.LowValue.Color = Color.White;
/// cf.MiddleValue.Type = ExcelConditionalFormattingValueObjectType.Percent;
/// cf.MiddleValue.Value = 50;
/// cf.MiddleValue.Color = Color.Blue;
/// cf.HighValue.Type = ExcelConditionalFormattingValueObjectType.Max;
/// cf.HighValue.Color = Color.Black;
/// </code>
/// </remarks>
public class ExcelConditionalFormattingCollection
: XmlHelper,
IEnumerable<IExcelConditionalFormattingRule>
{
/****************************************************************************************/
#region Private Properties
private List<IExcelConditionalFormattingRule> _rules = new List<IExcelConditionalFormattingRule>();
private ExcelWorksheet _worksheet = null;
#endregion Private Properties
/****************************************************************************************/
#region Constructors
/// <summary>
/// Initialize the <see cref="ExcelConditionalFormattingCollection"/>
/// </summary>
/// <param name="worksheet"></param>
internal ExcelConditionalFormattingCollection(
ExcelWorksheet worksheet)
: base(
worksheet.NameSpaceManager,
worksheet.WorksheetXml.DocumentElement)
{
Require.Argument(worksheet).IsNotNull("worksheet");
_worksheet = worksheet;
SchemaNodeOrder = _worksheet.SchemaNodeOrder;
// Look for all the <conditionalFormatting>
var conditionalFormattingNodes = TopNode.SelectNodes(
"//" + ExcelConditionalFormattingConstants.Paths.ConditionalFormatting,
_worksheet.NameSpaceManager);
// Check if we found at least 1 node
if ((conditionalFormattingNodes != null)
&& (conditionalFormattingNodes.Count > 0))
{
// Foreach <conditionalFormatting>
foreach (XmlNode conditionalFormattingNode in conditionalFormattingNodes)
{
// Check if @sqref attribute exists
if (conditionalFormattingNode.Attributes[ExcelConditionalFormattingConstants.Attributes.Sqref] == null)
{
throw new Exception(
ExcelConditionalFormattingConstants.Errors.MissingSqrefAttribute);
}
// Get the @sqref attribute
ExcelAddress address = new ExcelAddress(
conditionalFormattingNode.Attributes[ExcelConditionalFormattingConstants.Attributes.Sqref].Value);
// Check for all the <cfRules> nodes and load them
var cfRuleNodes = conditionalFormattingNode.SelectNodes(
ExcelConditionalFormattingConstants.Paths.CfRule,
_worksheet.NameSpaceManager);
// Foreach <cfRule> inside the current <conditionalFormatting>
foreach (XmlNode cfRuleNode in cfRuleNodes)
{
// Check if @type attribute exists
if (cfRuleNode.Attributes[ExcelConditionalFormattingConstants.Attributes.Type] == null)
{
throw new Exception(
ExcelConditionalFormattingConstants.Errors.MissingTypeAttribute);
}
// Check if @priority attribute exists
if (cfRuleNode.Attributes[ExcelConditionalFormattingConstants.Attributes.Priority] == null)
{
throw new Exception(
ExcelConditionalFormattingConstants.Errors.MissingPriorityAttribute);
}
// Get the <cfRule> main attributes
string typeAttribute = ExcelConditionalFormattingHelper.GetAttributeString(
cfRuleNode,
ExcelConditionalFormattingConstants.Attributes.Type);
int priority = ExcelConditionalFormattingHelper.GetAttributeInt(
cfRuleNode,
ExcelConditionalFormattingConstants.Attributes.Priority);
// Transform the @type attribute to EPPlus Rule Type (slighty diferente)
var type = ExcelConditionalFormattingRuleType.GetTypeByAttrbiute(
typeAttribute,
cfRuleNode,
_worksheet.NameSpaceManager);
// Create the Rule according to the correct type, address and priority
var cfRule = ExcelConditionalFormattingRuleFactory.Create(
type,
address,
priority,
_worksheet,
cfRuleNode);
// Add the new rule to the list
if(cfRule!=null)
_rules.Add(cfRule);
}
}
}
}
#endregion Constructors
/****************************************************************************************/
#region Methods
/// <summary>
///
/// </summary>
private void EnsureRootElementExists()
{
// Find the <worksheet> node
if (_worksheet.WorksheetXml.DocumentElement == null)
{
throw new Exception(
ExcelConditionalFormattingConstants.Errors.MissingWorksheetNode);
}
}
/// <summary>
/// GetRootNode
/// </summary>
/// <returns></returns>
private XmlNode GetRootNode()
{
EnsureRootElementExists();
return _worksheet.WorksheetXml.DocumentElement;
}
/// <summary>
/// Validates address - not empty (collisions are allowded)
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
private ExcelAddress ValidateAddress(
ExcelAddress address)
{
Require.Argument(address).IsNotNull("address");
//TODO: Are there any other validation we need to do?
return address;
}
/// <summary>
/// Get the next priority sequencial number
/// </summary>
/// <returns></returns>
private int GetNextPriority()
{
// Consider zero as the last priority when we have no CF rules
int lastPriority = 0;
// Search for the last priority
foreach (var cfRule in _rules)
{
if (cfRule.Priority > lastPriority)
{
lastPriority = cfRule.Priority;
}
}
// Our next priority is the last plus one
return lastPriority + 1;
}
#endregion Methods
/****************************************************************************************/
#region IEnumerable<IExcelConditionalFormatting>
/// <summary>
/// Number of validations
/// </summary>
public int Count
{
get { return _rules.Count; }
}
/// <summary>
/// Index operator, returns by 0-based index
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public IExcelConditionalFormattingRule this[int index]
{
get { return _rules[index]; }
set { _rules[index] = value; }
}
/// <summary>
/// Get the 'cfRule' enumerator
/// </summary>
/// <returns></returns>
IEnumerator<IExcelConditionalFormattingRule> IEnumerable<IExcelConditionalFormattingRule>.GetEnumerator()
{
return _rules.GetEnumerator();
}
/// <summary>
/// Get the 'cfRule' enumerator
/// </summary>
/// <returns></returns>
IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return _rules.GetEnumerator();
}
/// <summary>
/// Removes all 'cfRule' from the collection and from the XML.
/// <remarks>
/// This is the same as removing all the 'conditionalFormatting' nodes.
/// </remarks>
/// </summary>
public void RemoveAll()
{
// Look for all the <conditionalFormatting> nodes
var conditionalFormattingNodes = TopNode.SelectNodes(
"//" + ExcelConditionalFormattingConstants.Paths.ConditionalFormatting,
_worksheet.NameSpaceManager);
// Remove all the <conditionalFormatting> nodes one by one
foreach (XmlNode conditionalFormattingNode in conditionalFormattingNodes)
{
conditionalFormattingNode.ParentNode.RemoveChild(conditionalFormattingNode);
}
// Clear the <cfRule> item list
_rules.Clear();
}
/// <summary>
/// Remove a Conditional Formatting Rule by its object
/// </summary>
/// <param name="item"></param>
public void Remove(
IExcelConditionalFormattingRule item)
{
Require.Argument(item).IsNotNull("item");
try
{
// Point to the parent node
var oldParentNode = item.Node.ParentNode;
// Remove the <cfRule> from the old <conditionalFormatting> parent node
oldParentNode.RemoveChild(item.Node);
// Check if the old <conditionalFormatting> parent node has <cfRule> node inside it
if (!oldParentNode.HasChildNodes)
{
// Remove the old parent node
oldParentNode.ParentNode.RemoveChild(oldParentNode);
}
_rules.Remove(item);
}
catch
{
throw new Exception(
ExcelConditionalFormattingConstants.Errors.InvalidRemoveRuleOperation);
}
}
/// <summary>
/// Remove a Conditional Formatting Rule by its 0-based index
/// </summary>
/// <param name="index"></param>
public void RemoveAt(
int index)
{
Require.Argument(index).IsInRange(0, this.Count - 1, "index");
Remove(this[index]);
}
/// <summary>
/// Remove a Conditional Formatting Rule by its priority
/// </summary>
/// <param name="priority"></param>
public void RemoveByPriority(
int priority)
{
try
{
Remove(RulesByPriority(priority));
}
catch
{
}
}
/// <summary>
/// Get a rule by its priority
/// </summary>
/// <param name="priority"></param>
/// <returns></returns>
public IExcelConditionalFormattingRule RulesByPriority(
int priority)
{
return _rules.Find(x => x.Priority == priority);
}
#endregion IEnumerable<IExcelConditionalFormatting>
/****************************************************************************************/
#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>
/// Add AboveAverage Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingAverageGroup AddAboveAverage(
ExcelAddress address)
{
return (IExcelConditionalFormattingAverageGroup)AddRule(
eExcelConditionalFormattingRuleType.AboveAverage,
address);
}
/// <summary>
/// Add AboveOrEqualAverage Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingAverageGroup AddAboveOrEqualAverage(
ExcelAddress address)
{
return (IExcelConditionalFormattingAverageGroup)AddRule(
eExcelConditionalFormattingRuleType.AboveOrEqualAverage,
address);
}
/// <summary>
/// Add BelowAverage Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingAverageGroup AddBelowAverage(
ExcelAddress address)
{
return (IExcelConditionalFormattingAverageGroup)AddRule(
eExcelConditionalFormattingRuleType.BelowAverage,
address);
}
/// <summary>
/// Add BelowOrEqualAverage Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingAverageGroup AddBelowOrEqualAverage(
ExcelAddress address)
{
return (IExcelConditionalFormattingAverageGroup)AddRule(
eExcelConditionalFormattingRuleType.BelowOrEqualAverage,
address);
}
/// <summary>
/// Add AboveStdDev Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingStdDevGroup AddAboveStdDev(
ExcelAddress address)
{
return (IExcelConditionalFormattingStdDevGroup)AddRule(
eExcelConditionalFormattingRuleType.AboveStdDev,
address);
}
/// <summary>
/// Add BelowStdDev Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingStdDevGroup AddBelowStdDev(
ExcelAddress address)
{
return (IExcelConditionalFormattingStdDevGroup)AddRule(
eExcelConditionalFormattingRuleType.BelowStdDev,
address);
}
/// <summary>
/// Add Bottom Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTopBottomGroup AddBottom(
ExcelAddress address)
{
return (IExcelConditionalFormattingTopBottomGroup)AddRule(
eExcelConditionalFormattingRuleType.Bottom,
address);
}
/// <summary>
/// Add BottomPercent Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTopBottomGroup AddBottomPercent(
ExcelAddress address)
{
return (IExcelConditionalFormattingTopBottomGroup)AddRule(
eExcelConditionalFormattingRuleType.BottomPercent,
address);
}
/// <summary>
/// Add Top Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTopBottomGroup AddTop(
ExcelAddress address)
{
return (IExcelConditionalFormattingTopBottomGroup)AddRule(
eExcelConditionalFormattingRuleType.Top,
address);
}
/// <summary>
/// Add TopPercent Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTopBottomGroup AddTopPercent(
ExcelAddress address)
{
return (IExcelConditionalFormattingTopBottomGroup)AddRule(
eExcelConditionalFormattingRuleType.TopPercent,
address);
}
/// <summary>
/// Add Last7Days Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTimePeriodGroup AddLast7Days(
ExcelAddress address)
{
return (IExcelConditionalFormattingTimePeriodGroup)AddRule(
eExcelConditionalFormattingRuleType.Last7Days,
address);
}
/// <summary>
/// Add LastMonth Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTimePeriodGroup AddLastMonth(
ExcelAddress address)
{
return (IExcelConditionalFormattingTimePeriodGroup)AddRule(
eExcelConditionalFormattingRuleType.LastMonth,
address);
}
/// <summary>
/// Add LastWeek Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTimePeriodGroup AddLastWeek(
ExcelAddress address)
{
return (IExcelConditionalFormattingTimePeriodGroup)AddRule(
eExcelConditionalFormattingRuleType.LastWeek,
address);
}
/// <summary>
/// Add NextMonth Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTimePeriodGroup AddNextMonth(
ExcelAddress address)
{
return (IExcelConditionalFormattingTimePeriodGroup)AddRule(
eExcelConditionalFormattingRuleType.NextMonth,
address);
}
/// <summary>
/// Add NextWeek Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTimePeriodGroup AddNextWeek(
ExcelAddress address)
{
return (IExcelConditionalFormattingTimePeriodGroup)AddRule(
eExcelConditionalFormattingRuleType.NextWeek,
address);
}
/// <summary>
/// Add ThisMonth Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTimePeriodGroup AddThisMonth(
ExcelAddress address)
{
return (IExcelConditionalFormattingTimePeriodGroup)AddRule(
eExcelConditionalFormattingRuleType.ThisMonth,
address);
}
/// <summary>
/// Add ThisWeek Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTimePeriodGroup AddThisWeek(
ExcelAddress address)
{
return (IExcelConditionalFormattingTimePeriodGroup)AddRule(
eExcelConditionalFormattingRuleType.ThisWeek,
address);
}
/// <summary>
/// Add Today Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTimePeriodGroup AddToday(
ExcelAddress address)
{
return (IExcelConditionalFormattingTimePeriodGroup)AddRule(
eExcelConditionalFormattingRuleType.Today,
address);
}
/// <summary>
/// Add Tomorrow Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTimePeriodGroup AddTomorrow(
ExcelAddress address)
{
return (IExcelConditionalFormattingTimePeriodGroup)AddRule(
eExcelConditionalFormattingRuleType.Tomorrow,
address);
}
/// <summary>
/// Add Yesterday Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTimePeriodGroup AddYesterday(
ExcelAddress address)
{
return (IExcelConditionalFormattingTimePeriodGroup)AddRule(
eExcelConditionalFormattingRuleType.Yesterday,
address);
}
/// <summary>
/// Add BeginsWith Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingBeginsWith AddBeginsWith(
ExcelAddress address)
{
return (IExcelConditionalFormattingBeginsWith)AddRule(
eExcelConditionalFormattingRuleType.BeginsWith,
address);
}
/// <summary>
/// Add Between Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingBetween AddBetween(
ExcelAddress address)
{
return (IExcelConditionalFormattingBetween)AddRule(
eExcelConditionalFormattingRuleType.Between,
address);
}
/// <summary>
/// Add ContainsBlanks Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingContainsBlanks AddContainsBlanks(
ExcelAddress address)
{
return (IExcelConditionalFormattingContainsBlanks)AddRule(
eExcelConditionalFormattingRuleType.ContainsBlanks,
address);
}
/// <summary>
/// Add ContainsErrors Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingContainsErrors AddContainsErrors(
ExcelAddress address)
{
return (IExcelConditionalFormattingContainsErrors)AddRule(
eExcelConditionalFormattingRuleType.ContainsErrors,
address);
}
/// <summary>
/// Add ContainsText Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingContainsText AddContainsText(
ExcelAddress address)
{
return (IExcelConditionalFormattingContainsText)AddRule(
eExcelConditionalFormattingRuleType.ContainsText,
address);
}
/// <summary>
/// Add DuplicateValues Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingDuplicateValues AddDuplicateValues(
ExcelAddress address)
{
return (IExcelConditionalFormattingDuplicateValues)AddRule(
eExcelConditionalFormattingRuleType.DuplicateValues,
address);
}
/// <summary>
/// Add EndsWith Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingEndsWith AddEndsWith(
ExcelAddress address)
{
return (IExcelConditionalFormattingEndsWith)AddRule(
eExcelConditionalFormattingRuleType.EndsWith,
address);
}
/// <summary>
/// Add Equal Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingEqual AddEqual(
ExcelAddress address)
{
return (IExcelConditionalFormattingEqual)AddRule(
eExcelConditionalFormattingRuleType.Equal,
address);
}
/// <summary>
/// Add Expression Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingExpression AddExpression(
ExcelAddress address)
{
return (IExcelConditionalFormattingExpression)AddRule(
eExcelConditionalFormattingRuleType.Expression,
address);
}
/// <summary>
/// Add GreaterThan Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingGreaterThan AddGreaterThan(
ExcelAddress address)
{
return (IExcelConditionalFormattingGreaterThan)AddRule(
eExcelConditionalFormattingRuleType.GreaterThan,
address);
}
/// <summary>
/// Add GreaterThanOrEqual Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingGreaterThanOrEqual AddGreaterThanOrEqual(
ExcelAddress address)
{
return (IExcelConditionalFormattingGreaterThanOrEqual)AddRule(
eExcelConditionalFormattingRuleType.GreaterThanOrEqual,
address);
}
/// <summary>
/// Add LessThan Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingLessThan AddLessThan(
ExcelAddress address)
{
return (IExcelConditionalFormattingLessThan)AddRule(
eExcelConditionalFormattingRuleType.LessThan,
address);
}
/// <summary>
/// Add LessThanOrEqual Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingLessThanOrEqual AddLessThanOrEqual(
ExcelAddress address)
{
return (IExcelConditionalFormattingLessThanOrEqual)AddRule(
eExcelConditionalFormattingRuleType.LessThanOrEqual,
address);
}
/// <summary>
/// Add NotBetween Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingNotBetween AddNotBetween(
ExcelAddress address)
{
return (IExcelConditionalFormattingNotBetween)AddRule(
eExcelConditionalFormattingRuleType.NotBetween,
address);
}
/// <summary>
/// Add NotContainsBlanks Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingNotContainsBlanks AddNotContainsBlanks(
ExcelAddress address)
{
return (IExcelConditionalFormattingNotContainsBlanks)AddRule(
eExcelConditionalFormattingRuleType.NotContainsBlanks,
address);
}
/// <summary>
/// Add NotContainsErrors Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingNotContainsErrors AddNotContainsErrors(
ExcelAddress address)
{
return (IExcelConditionalFormattingNotContainsErrors)AddRule(
eExcelConditionalFormattingRuleType.NotContainsErrors,
address);
}
/// <summary>
/// Add NotContainsText Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingNotContainsText AddNotContainsText(
ExcelAddress address)
{
return (IExcelConditionalFormattingNotContainsText)AddRule(
eExcelConditionalFormattingRuleType.NotContainsText,
address);
}
/// <summary>
/// Add NotEqual Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingNotEqual AddNotEqual(
ExcelAddress address)
{
return (IExcelConditionalFormattingNotEqual)AddRule(
eExcelConditionalFormattingRuleType.NotEqual,
address);
}
/// <summary>
/// Add Unique Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingUniqueValues AddUniqueValues(
ExcelAddress address)
{
return (IExcelConditionalFormattingUniqueValues)AddRule(
eExcelConditionalFormattingRuleType.UniqueValues,
address);
}
/// <summary>
/// Add ThreeColorScale Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingThreeColorScale AddThreeColorScale(
ExcelAddress address)
{
return (IExcelConditionalFormattingThreeColorScale)AddRule(
eExcelConditionalFormattingRuleType.ThreeColorScale,
address);
}
/// <summary>
/// Add TwoColorScale Rule
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public IExcelConditionalFormattingTwoColorScale AddTwoColorScale(
ExcelAddress address)
{
return (IExcelConditionalFormattingTwoColorScale)AddRule(
eExcelConditionalFormattingRuleType.TwoColorScale,
address);
}
/// <summary>
/// Add ThreeIconSet Rule
/// </summary>
/// <param name="Address">The address</param>
/// <param name="IconSet">Type of iconset</param>
/// <returns></returns>
public IExcelConditionalFormattingThreeIconSet<eExcelconditionalFormatting3IconsSetType> AddThreeIconSet(ExcelAddress Address, eExcelconditionalFormatting3IconsSetType IconSet)
{
var icon = (IExcelConditionalFormattingThreeIconSet<eExcelconditionalFormatting3IconsSetType>)AddRule(
eExcelConditionalFormattingRuleType.ThreeIconSet,
Address);
icon.IconSet = IconSet;
return icon;
}
/// <summary>
/// Adds a FourIconSet rule
/// </summary>
/// <param name="Address"></param>
/// <param name="IconSet"></param>
/// <returns></returns>
public IExcelConditionalFormattingFourIconSet<eExcelconditionalFormatting4IconsSetType> AddFourIconSet(ExcelAddress Address, eExcelconditionalFormatting4IconsSetType IconSet)
{
var icon = (IExcelConditionalFormattingFourIconSet<eExcelconditionalFormatting4IconsSetType>)AddRule(
eExcelConditionalFormattingRuleType.FourIconSet,
Address);
icon.IconSet = IconSet;
return icon;
}
/// <summary>
/// Adds a FiveIconSet rule
/// </summary>
/// <param name="Address"></param>
/// <param name="IconSet"></param>
/// <returns></returns>
public IExcelConditionalFormattingFiveIconSet AddFiveIconSet(ExcelAddress Address, eExcelconditionalFormatting5IconsSetType IconSet)
{
var icon = (IExcelConditionalFormattingFiveIconSet)AddRule(
eExcelConditionalFormattingRuleType.FiveIconSet,
Address);
icon.IconSet = IconSet;
return icon;
}
/// <summary>
/// Adds a databar rule
/// </summary>
/// <param name="Address"></param>
/// <param name="color"></param>
/// <returns></returns>
public IExcelConditionalFormattingDataBarGroup AddDatabar(ExcelAddress Address, Color color)
{
var dataBar = (IExcelConditionalFormattingDataBarGroup)AddRule(
eExcelConditionalFormattingRuleType.DataBar,
Address);
dataBar.Color=color;
return dataBar;
}
#endregion Conditional Formatting Rules
}
}