Custom Table Styles - DON-PHAM/EPPlus GitHub Wiki

From EPPlus version 5.6 you can create your own custom named table via the ExcelPackage.Workbook.Styles property. Custom styles can either be created from scratch or use a build-in or another custom style as a template.

The samples below are from our sample project - Sample 27

Samples

Custom table styles can be created with the CreateTableStyle or the CreateTableAndPivotTableStyle method. The CreateTableStyle method will return a styling object with elements that only applies to table. The CreateTableAndPivotTableStyle will create a styling object that can be used both for tables and pivot tables.

//Create a named style used for tables only.
var customTableStyle = p.Workbook.Styles.CreateTableStyle("Custom Table Style 1");

The returned object exposes properties to set styles for different elements of a table.

customTableStyle.WholeTable.Style.Font.Color.SetColor(eThemeSchemeColor.Text2);
customTableStyle.HeaderRow.Style.Font.Bold = true;
customTableStyle.HeaderRow.Style.Font.Italic = true;

customTableStyle.HeaderRow.Style.Fill.Style = eDxfFillStyle.GradientFill;
customTableStyle.HeaderRow.Style.Fill.Gradient.Degree = 90;

var c1 = customTableStyle.HeaderRow.Style.Fill.Gradient.Colors.Add(0);
c1.Color.SetColor(Color.LightGreen);

var c3 = customTableStyle.HeaderRow.Style.Fill.Gradient.Colors.Add(100);
c3.Color.SetColor(Color.DarkGreen);

customTableStyle.TotalRow.Style.Font.Italic = true;

Style elements used for stripes also exposes the BandSize property to set the number of stripes per row or column. Here we use a build-in table style as template for our custom style.

var customTableStyle = p.Workbook.Styles.CreateTableStyle(styleName, TableStyles.Dark11);

//Set the stripe size to 2 rows for both the both the first and second row stripes element.
customTableStyle.FirstRowStripe.BandSize = 2;
customTableStyle.FirstRowStripe.Style.Fill.BackgroundColor.SetColor(Color.LightGreen);

customTableStyle.SecondRowStripe.BandSize = 2;
customTableStyle.SecondRowStripe.Style.Fill.BackgroundColor.SetColor(Color.LightSkyBlue);

As described, you can also create a named table style that can be applied to both tables and pivot tables. This style will have all style elements for both tables and pivot tables.

//Create a named style that can be used both for tables and pivot tables. 
//We create this style from one of the build in pivot table styles - Medium13, but table styles can also be used as a parameter for this method
var customTableStyle = p.Workbook.Styles.CreateTableAndPivotTableStyle(customTableStyle3, PivotTableStyles.Medium13);

To apply a custom table style to a table or pivot table you only need to set the StyleName property to the name you choose for you style.

table1.StyleName = "Custom Table Style 1";

Custom Slicer Styles

In the same way as you create custom table style you can create named styles from slicers. A named slicer style is created with the CreateSlicerStyle method...

            //Slicers can also be styled by creating a named style. Here we use the build in Light 5 as a template and changes the font of the slicer.
            //See Sample 27 for more detailed samples.
            var slicer = pivotTable4.Fields["CompanyName"].Slicer;
            var styleName = "CustomSlicerStyle1";
            var style = pck.Workbook.Styles.CreateSlicerStyle(styleName, eSlicerStyle.Light5);
            style.WholeTable.Style.Font.Name = "Stencil";
            slicer.StyleName = styleName;

Images/CustomSlicerStyle1.PNG

The slicer styles contains slicer unique elements, like SelectedItemWithData in the code below, that can have different styles.

//Create a named style that applies to slicers with a console feel to the style.
var customSlicerStyle = p.Workbook.Styles.CreateSlicerStyle(styleName);

customSlicerStyle.WholeTable.Style.Font.Name = "Consolas";
customSlicerStyle.WholeTable.Style.Font.Size = 12;
customSlicerStyle.WholeTable.Style.Font.Color.SetColor(Color.WhiteSmoke);
customSlicerStyle.WholeTable.Style.Fill.BackgroundColor.SetColor(Color.Black);

customSlicerStyle.SelectedItemWithData.Style.Fill.BackgroundColor.SetColor(Color.Gray);
customSlicerStyle.SelectedItemWithData.Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.DarkGray);

See Custom Named Styles sample .NET Framework or Custom Named Styles sample .NET Core