| /******************************************************************************* |
| * 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; |
| } |
| } |
| } |