blob: 34bacef5707fabeb8c9e2c6b4d242c812239ca2c [file] [log] [blame]
/*******************************************************************************
* 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;
}
}
}