| using System; | 
 | using System.Collections.Generic; | 
 | using System.Text; | 
 | using System.IO; | 
 | using OfficeOpenXml; | 
 | using OfficeOpenXml.Style; | 
 | using System.Drawing; | 
 | namespace EPPlusSamples | 
 | { | 
 |     class Sample7 | 
 |     { | 
 |         /// <summary> | 
 |         /// This sample load a number of rows, style them and insert a row at the top. | 
 |         /// A password is set to protect locked cells. Column 3 & 4 will be editable, the rest will be locked. | 
 |         /// </summary> | 
 |         /// <param name="outputDir"></param> | 
 |         /// <param name="Rows"></param> | 
 |         public static string RunSample7(DirectoryInfo outputDir, int Rows) | 
 |         { | 
 |             FileInfo newFile = new FileInfo(outputDir.FullName + @"\sample7.xlsx"); | 
 |             if (newFile.Exists) | 
 |             { | 
 |                 newFile.Delete();  // ensures we create a new workbook | 
 |                 newFile = new FileInfo(outputDir.FullName + @"\sample7.xlsx"); | 
 |             } | 
 |  | 
 |             using (ExcelPackage package = new ExcelPackage()) | 
 |             { | 
 |                 Console.WriteLine("{0:HH.mm.ss}\tStarting...", DateTime.Now); | 
 |  | 
 |                 //Load the sheet with one string column, one date column and a few random numbers. | 
 |                 var ws = package.Workbook.Worksheets.Add("Performance Test"); | 
 |  | 
 |                 //Format all cells | 
 |                 ExcelRange cols = ws.Cells["A:XFD"]; | 
 |                 cols.Style.Fill.PatternType = ExcelFillStyle.Solid; | 
 |                 cols.Style.Fill.BackgroundColor.SetColor(Color.LightGray); | 
 |  | 
 |                 var rnd = new Random();                 | 
 |                 for (int row = 1; row <= Rows; row++) | 
 |                 { | 
 |                     ws.SetValue(row, 1, row);                               //The SetValue method is a little bit faster than using the Value property | 
 |                     ws.SetValue(row, 2, string.Format("Row {0}", row)); | 
 |                     ws.SetValue(row, 3, DateTime.Today.AddDays(row)); | 
 |                     ws.SetValue(row, 4, rnd.NextDouble() * 10000); | 
 |                     if (row % 10000 == 0) | 
 |                     { | 
 |                         Console.WriteLine("{0:HH.mm.ss}\tWriting row {1}...", DateTime.Now, row); | 
 |                     } | 
 |                 } | 
 |                 ws.Cells[1, 5, Rows, 5].FormulaR1C1 = "RC[-4]+RC[-1]"; | 
 |  | 
 |                 //Add a sum at the end | 
 |                 ws.Cells[Rows + 1, 5].Formula = string.Format("Sum({0})", new ExcelAddress(1, 5, Rows, 5).Address); | 
 |                 ws.Cells[Rows + 1, 5].Style.Font.Bold = true; | 
 |                 ws.Cells[Rows + 1, 5].Style.Numberformat.Format = "#,##0.00"; | 
 |  | 
 |                 Console.WriteLine("{0:HH.mm.ss}\tWriting row {1}...", DateTime.Now, Rows); | 
 |                 Console.WriteLine("{0:HH.mm.ss}\tFormatting...", DateTime.Now); | 
 |                 //Format the date and numeric columns | 
 |                 ws.Cells[1, 1, Rows, 1].Style.Numberformat.Format = "#,##0"; | 
 |                 ws.Cells[1, 3, Rows, 3].Style.Numberformat.Format = "YYYY-MM-DD"; | 
 |                 ws.Cells[1, 4, Rows, 5].Style.Numberformat.Format = "#,##0.00"; | 
 |  | 
 |                 Console.WriteLine("{0:HH.mm.ss}\tInsert a row at the top...", DateTime.Now); | 
 |                 //Insert a row at the top. Note that the formula-addresses are shifted down | 
 |                 ws.InsertRow(1, 1); | 
 |  | 
 |                 //Write the headers and style them | 
 |                 ws.Cells["A1"].Value = "Index"; | 
 |                 ws.Cells["B1"].Value = "Text"; | 
 |                 ws.Cells["C1"].Value = "Date"; | 
 |                 ws.Cells["D1"].Value = "Number"; | 
 |                 ws.Cells["E1"].Value = "Formula"; | 
 |                 ws.View.FreezePanes(2, 1); | 
 |  | 
 |                 using (var rng = ws.Cells["A1:E1"]) | 
 |                 { | 
 |                     rng.Style.Font.Bold = true; | 
 |                     rng.Style.Font.Color.SetColor(Color.White); | 
 |                     rng.Style.WrapText = true; | 
 |                     rng.Style.VerticalAlignment = ExcelVerticalAlignment.Center; | 
 |                     rng.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; | 
 |                     rng.Style.Fill.PatternType = ExcelFillStyle.Solid; | 
 |                     rng.Style.Fill.BackgroundColor.SetColor(Color.DarkBlue); | 
 |                 } | 
 |  | 
 |                 //Calculate (Commented away thisk, it was a bit time consuming... /MA) | 
 |                 // Console.WriteLine("{0:HH.mm.ss}\tCalculate formulas...", DateTime.Now); | 
 |                 // ws.Calculate(); | 
 |  | 
 |                 Console.WriteLine("{0:HH.mm.ss}\tAutofit columns and lock and format cells...", DateTime.Now); | 
 |                 ws.Cells[Rows - 100, 1, Rows, 5].AutoFitColumns(5);   //Auto fit using the last 100 rows with minimum width 5 | 
 |                 ws.Column(5).Width = 15;                            //We need to set the width for column F manually since the end sum formula is the widest cell in the column (EPPlus don't calculate any forumlas, so no output text is avalible).  | 
 |  | 
 |                 //Now we set the sheetprotection and a password. | 
 |                 ws.Cells[2, 3, Rows + 1, 4].Style.Locked = false; | 
 |                 ws.Cells[2, 3, Rows + 1, 4].Style.Fill.PatternType = ExcelFillStyle.Solid; | 
 |                 ws.Cells[2, 3, Rows + 1, 4].Style.Fill.BackgroundColor.SetColor(Color.White); | 
 |                 ws.Cells[1, 5, Rows + 2, 5].Style.Hidden = true;    //Hide the formula | 
 |                  | 
 |                 ws.Protection.SetPassword("EPPlus"); | 
 |  | 
 |                 ws.Select("C2"); | 
 |                 Console.WriteLine("{0:HH.mm.ss}\tSaving...", DateTime.Now); | 
 |                 package.Compression = CompressionLevel.BestSpeed; | 
 |                 package.SaveAs(newFile); | 
 |             } | 
 |             Console.WriteLine("{0:HH.mm.ss}\tDone!!", DateTime.Now); | 
 |             return newFile.FullName; | 
 |         } | 
 |     } | 
 | } |