|  | /******************************************************************************* | 
|  | * You may amend and distribute as you like, but don't remove this header! | 
|  | * | 
|  | * All rights reserved. | 
|  | * | 
|  | * EPPlus is an Open Source project provided under the | 
|  | * GNU General Public License (GPL) as published by the | 
|  | * Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 
|  | * | 
|  | * EPPlus provides server-side generation of Excel 2007 spreadsheets. | 
|  | * See http://www.codeplex.com/EPPlus for details. | 
|  | * | 
|  | * | 
|  | * | 
|  | * The GNU General Public License can be viewed at http://www.opensource.org/licenses/gpl-license.php | 
|  | * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html | 
|  | * | 
|  | * The code for this project may be used and redistributed by any means PROVIDING it is | 
|  | * not sold for profit without the author's written consent, and providing that this notice | 
|  | * and the author's name and all copyright notices remain intact. | 
|  | * | 
|  | * 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				Added							2012-04-03 | 
|  | *******************************************************************************/ | 
|  | using System; | 
|  | using System.Collections.Generic; | 
|  | using System.Text; | 
|  | using System.IO; | 
|  | using OfficeOpenXml; | 
|  | using System.Xml; | 
|  | using System.Drawing; | 
|  | using OfficeOpenXml.Style; | 
|  | using OfficeOpenXml.Style.Dxf; | 
|  | using OfficeOpenXml.DataValidation; | 
|  | using OfficeOpenXml.ConditionalFormatting; | 
|  |  | 
|  | namespace EPPlusSamples | 
|  | { | 
|  | class Sample14 | 
|  | { | 
|  | /// <summary> | 
|  | /// Sample 14 - Conditional formatting example | 
|  | /// </summary> | 
|  | public static string RunSample14(DirectoryInfo outputDir) | 
|  | { | 
|  | FileInfo newFile = new FileInfo(outputDir.FullName + @"\sample14.xlsx"); | 
|  |  | 
|  | if (newFile.Exists) | 
|  | { | 
|  | newFile.Delete();  // ensures we create a new workbook | 
|  | newFile = new FileInfo(outputDir.FullName + @"\sample14.xlsx"); | 
|  | } | 
|  |  | 
|  | using (ExcelPackage package = new ExcelPackage(newFile)) | 
|  | { | 
|  | // add a new worksheet to the empty workbook | 
|  | ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Conditional Formatting"); | 
|  |  | 
|  | // Create 4 columns of samples data | 
|  | for (int col = 1; col < 10; col++) | 
|  | { | 
|  | // Add the headers | 
|  | worksheet.Cells[1, col].Value = "Sample " + col; | 
|  |  | 
|  | for (int row = 2; row < 21; row++) | 
|  | { | 
|  | // Add some items... | 
|  | worksheet.Cells[row, col].Value = row; | 
|  | } | 
|  | } | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // TwoColorScale Conditional Formatting example | 
|  | // ------------------------------------------------------------------- | 
|  | ExcelAddress cfAddress1 = new ExcelAddress("A2:A10"); | 
|  | var cfRule1 = worksheet.ConditionalFormatting.AddTwoColorScale(cfAddress1); | 
|  |  | 
|  | // Now, lets change some properties: | 
|  | cfRule1.LowValue.Type = eExcelConditionalFormattingValueObjectType.Num; | 
|  | cfRule1.LowValue.Value = 4; | 
|  | cfRule1.LowValue.Color = ColorTranslator.FromHtml("#FFFFEB84"); | 
|  | cfRule1.HighValue.Type = eExcelConditionalFormattingValueObjectType.Formula; | 
|  | cfRule1.HighValue.Formula = "IF($G$1=\"A</x:&'cfRule>\",1,5)"; | 
|  | cfRule1.StopIfTrue = true; | 
|  | cfRule1.Style.Font.Bold = true; | 
|  |  | 
|  | // But others you can't (readonly) | 
|  | // cfRule1.Type = eExcelConditionalFormattingRuleType.ThreeColorScale; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // ThreeColorScale Conditional Formatting example | 
|  | // ------------------------------------------------------------------- | 
|  | ExcelAddress cfAddress2 = new ExcelAddress(2, 2, 10, 2);  //="B2:B10" | 
|  | var cfRule2 = worksheet.ConditionalFormatting.AddThreeColorScale(cfAddress2); | 
|  |  | 
|  | // Changing some properties again | 
|  | cfRule2.Priority = 1; | 
|  | cfRule2.MiddleValue.Type = eExcelConditionalFormattingValueObjectType.Percentile; | 
|  | cfRule2.MiddleValue.Value = 30; | 
|  | cfRule2.StopIfTrue = true; | 
|  |  | 
|  | // You can access a rule by its Priority | 
|  | var cfRule2Priority = cfRule2.Priority; | 
|  | var cfRule2_1 = worksheet.ConditionalFormatting.RulesByPriority(cfRule2Priority); | 
|  |  | 
|  | // And you can even change the rule's Address | 
|  | cfRule2_1.Address = new ExcelAddress("Z1:Z3"); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Adding another ThreeColorScale in a different way (observe that we are | 
|  | // pointing to the same range as the first rule we entered. Excel allows it to | 
|  | // happen and group the rules in one <conditionalFormatting> node) | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule3 = worksheet.Cells[cfAddress1.Address].ConditionalFormatting.AddThreeColorScale(); | 
|  | cfRule3.LowValue.Color = Color.LemonChiffon; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Change the rules priorities to change their execution order | 
|  | // ------------------------------------------------------------------- | 
|  | cfRule3.Priority = 1; | 
|  | cfRule1.Priority = 2; | 
|  | cfRule2.Priority = 3; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create an Above Average rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule5 = worksheet.ConditionalFormatting.AddAboveAverage( | 
|  | new ExcelAddress("B11:B20")); | 
|  | cfRule5.Style.Font.Bold = true; | 
|  | cfRule5.Style.Font.Color.Color = Color.Red; | 
|  | cfRule5.Style.Font.Strike = true; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create an Above Or Equal Average rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule6 = worksheet.ConditionalFormatting.AddAboveOrEqualAverage( | 
|  | new ExcelAddress("B11:B20")); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Below Average rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule7 = worksheet.ConditionalFormatting.AddBelowAverage( | 
|  | new ExcelAddress("B11:B20")); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Below Or Equal Average rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule8 = worksheet.ConditionalFormatting.AddBelowOrEqualAverage( | 
|  | new ExcelAddress("B11:B20")); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Above StdDev rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule9 = worksheet.ConditionalFormatting.AddAboveStdDev( | 
|  | new ExcelAddress("B11:B20")); | 
|  | cfRule9.StdDev = 0; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Below StdDev rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule10 = worksheet.ConditionalFormatting.AddBelowStdDev( | 
|  | new ExcelAddress("B11:B20")); | 
|  |  | 
|  | cfRule10.StdDev = 2; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Bottom rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule11 = worksheet.ConditionalFormatting.AddBottom( | 
|  | new ExcelAddress("B11:B20")); | 
|  |  | 
|  | cfRule11.Rank = 4; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Bottom Percent rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule12 = worksheet.ConditionalFormatting.AddBottomPercent( | 
|  | new ExcelAddress("B11:B20")); | 
|  |  | 
|  | cfRule12.Rank = 15; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Top rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule13 = worksheet.ConditionalFormatting.AddTop( | 
|  | new ExcelAddress("B11:B20")); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Top Percent rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule14 = worksheet.ConditionalFormatting.AddTopPercent( | 
|  | new ExcelAddress("B11:B20")); | 
|  |  | 
|  | cfRule14.Style.Border.Left.Style = ExcelBorderStyle.Thin; | 
|  | cfRule14.Style.Border.Left.Color.Theme = 3; | 
|  | cfRule14.Style.Border.Bottom.Style = ExcelBorderStyle.DashDot; | 
|  | cfRule14.Style.Border.Bottom.Color.Index=8; | 
|  | cfRule14.Style.Border.Right.Style = ExcelBorderStyle.Thin; | 
|  | cfRule14.Style.Border.Right.Color.Color=Color.Blue; | 
|  | cfRule14.Style.Border.Top.Style = ExcelBorderStyle.Hair; | 
|  | cfRule14.Style.Border.Top.Color.Auto=true; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Last 7 Days rule | 
|  | // ------------------------------------------------------------------- | 
|  | ExcelAddress timePeriodAddress = new ExcelAddress("D21:G34 C11:C20"); | 
|  | var cfRule15 = worksheet.ConditionalFormatting.AddLast7Days( | 
|  | timePeriodAddress); | 
|  |  | 
|  | cfRule15.Style.Fill.PatternType = ExcelFillStyle.LightTrellis; | 
|  | cfRule15.Style.Fill.PatternColor.Color = Color.BurlyWood; | 
|  | cfRule15.Style.Fill.BackgroundColor.Color = Color.LightCyan; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Last Month rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule16 = worksheet.ConditionalFormatting.AddLastMonth( | 
|  | timePeriodAddress); | 
|  |  | 
|  | cfRule16.Style.NumberFormat.Format = "YYYY"; | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Last Week rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule17 = worksheet.ConditionalFormatting.AddLastWeek( | 
|  | timePeriodAddress); | 
|  | cfRule17.Style.NumberFormat.Format = "YYYY"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Next Month rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule18 = worksheet.ConditionalFormatting.AddNextMonth( | 
|  | timePeriodAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Next Week rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule19 = worksheet.ConditionalFormatting.AddNextWeek( | 
|  | timePeriodAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a This Month rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule20 = worksheet.ConditionalFormatting.AddThisMonth( | 
|  | timePeriodAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a This Week rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule21 = worksheet.ConditionalFormatting.AddThisWeek( | 
|  | timePeriodAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Today rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule22 = worksheet.ConditionalFormatting.AddToday( | 
|  | timePeriodAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Tomorrow rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule23 = worksheet.ConditionalFormatting.AddTomorrow( | 
|  | timePeriodAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Yesterday rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule24 = worksheet.ConditionalFormatting.AddYesterday( | 
|  | timePeriodAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a BeginsWith rule | 
|  | // ------------------------------------------------------------------- | 
|  | ExcelAddress cellIsAddress = new ExcelAddress("E11:E20"); | 
|  | var cfRule25 = worksheet.ConditionalFormatting.AddBeginsWith( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule25.Text = "SearchMe"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a Between rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule26 = worksheet.ConditionalFormatting.AddBetween( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule26.Formula = "IF(E11>5,10,20)"; | 
|  | cfRule26.Formula2 = "IF(E11>5,30,50)"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a ContainsBlanks rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule27 = worksheet.ConditionalFormatting.AddContainsBlanks( | 
|  | cellIsAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a ContainsErrors rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule28 = worksheet.ConditionalFormatting.AddContainsErrors( | 
|  | cellIsAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a ContainsText rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule29 = worksheet.ConditionalFormatting.AddContainsText( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule29.Text = "Me"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a DuplicateValues rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule30 = worksheet.ConditionalFormatting.AddDuplicateValues( | 
|  | cellIsAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create an EndsWith rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule31 = worksheet.ConditionalFormatting.AddEndsWith( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule31.Text = "EndText"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create an Equal rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule32 = worksheet.ConditionalFormatting.AddEqual( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule32.Formula = "6"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create an Expression rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule33 = worksheet.ConditionalFormatting.AddExpression( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule33.Formula = "E11=E12"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a GreaterThan rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule34 = worksheet.ConditionalFormatting.AddGreaterThan( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule34.Formula = "SE(E11<10,10,65)"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a GreaterThanOrEqual rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule35 = worksheet.ConditionalFormatting.AddGreaterThanOrEqual( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule35.Formula = "35"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a LessThan rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule36 = worksheet.ConditionalFormatting.AddLessThan( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule36.Formula = "36"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a LessThanOrEqual rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule37 = worksheet.ConditionalFormatting.AddLessThanOrEqual( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule37.Formula = "37"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a NotBetween rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule38 = worksheet.ConditionalFormatting.AddNotBetween( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule38.Formula = "333"; | 
|  | cfRule38.Formula2 = "999"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a NotContainsBlanks rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule39 = worksheet.ConditionalFormatting.AddNotContainsBlanks( | 
|  | cellIsAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a NotContainsErrors rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule40 = worksheet.ConditionalFormatting.AddNotContainsErrors( | 
|  | cellIsAddress); | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create a NotContainsText rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule41 = worksheet.ConditionalFormatting.AddNotContainsText( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule41.Text = "NotMe"; | 
|  |  | 
|  | // ------------------------------------------------------------------- | 
|  | // Create an NotEqual rule | 
|  | // ------------------------------------------------------------------- | 
|  | var cfRule42 = worksheet.ConditionalFormatting.AddNotEqual( | 
|  | cellIsAddress); | 
|  |  | 
|  | cfRule42.Formula = "14"; | 
|  |  | 
|  | ExcelAddress cfAddress43 = new ExcelAddress("G2:G10"); | 
|  | var cfRule43 = worksheet.ConditionalFormatting.AddThreeIconSet(cfAddress43, eExcelconditionalFormatting3IconsSetType.TrafficLights1); | 
|  |  | 
|  | ExcelAddress cfAddress44 = new ExcelAddress("H2:H10"); | 
|  | var cfRule44 = worksheet.ConditionalFormatting.AddDatabar(cfAddress44, Color.DarkBlue); | 
|  |  | 
|  | // ----------------------------------------------------------- | 
|  | // Removing Conditional Formatting rules | 
|  | // ----------------------------------------------------------- | 
|  | // Remove one Rule by its object | 
|  | //worksheet.ConditionalFormatting.Remove(cfRule1); | 
|  |  | 
|  | // Remove one Rule by index | 
|  | //worksheet.ConditionalFormatting.RemoveAt(1); | 
|  |  | 
|  | // Remove one Rule by its Priority | 
|  | //worksheet.ConditionalFormatting.RemoveByPriority(2); | 
|  |  | 
|  | // Remove all the Rules | 
|  | //worksheet.ConditionalFormatting.RemoveAll(); | 
|  |  | 
|  | // set some document properties | 
|  | package.Workbook.Properties.Title = "Conditional Formatting"; | 
|  | package.Workbook.Properties.Author = "Eyal Seagull"; | 
|  | package.Workbook.Properties.Comments = "This sample demonstrates how to add Conditional Formatting to an Excel 2007 worksheet using EPPlus"; | 
|  |  | 
|  | // set some custom property values | 
|  | package.Workbook.Properties.SetCustomPropertyValue("Checked by", "Eyal Seagull"); | 
|  | package.Workbook.Properties.SetCustomPropertyValue("AssemblyName", "EPPlus"); | 
|  |  | 
|  | // save our new workbook and we are done! | 
|  | package.Save(); | 
|  | } | 
|  |  | 
|  | return newFile.FullName; | 
|  | } | 
|  | } | 
|  | } |