using System.Collections.Generic; using System.Drawing; using System.IO; using OfficeOpenXml; using OfficeOpenXml.Style; namespace WebInterface.Helpers { /// /// Lot # / work order # template generator /// public class ExcelTemplateGenerator { /// /// Generates Excel spreadsheet data entry template /// /// Data type of source data /// Source data to display in template /// Column header text /// Generated spreadsheet public static byte[] Generate(List sourceData, string headerText) { //Create worksheet to hold data ExcelPackage package = new ExcelPackage(); ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Data Entry Template"); //Write header worksheet.Cells[1, 1].Value = headerText; worksheet.Cells[1, 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; worksheet.Cells[1, 1].Style.Font.Bold = true; worksheet.Cells[1, 1].Style.Fill.PatternType = ExcelFillStyle.Solid; worksheet.Cells[1, 1].Style.Fill.BackgroundColor.SetColor(Color.Gainsboro); worksheet.Column(1).Width = 45; //Write uploaded data if (sourceData != null) { int row = 2; foreach (T element in sourceData) { worksheet.Cells[row++, 1].Value = element; } } //Write result MemoryStream fileStream = new MemoryStream(); package.SaveAs(fileStream); fileStream.Position = 0; byte[] data = fileStream.ToArray(); return data; } /// /// Generates Excel spreadsheet data entry template /// /// Source data to display in template /// Column header text /// Generated spreadsheet public static byte[] Generate(object[][] sourceData, string[] headerText) { //Create worksheet to hold data ExcelPackage package = new ExcelPackage(); ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Data Entry Template"); int numColumns = headerText.Length; //Write header ExcelRange header = worksheet.Cells[1, 1, 1, numColumns]; header.LoadFromArrays(new List { headerText }); header.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; header.Style.Font.Bold = true; header.Style.Fill.PatternType = ExcelFillStyle.Solid; header.Style.Fill.BackgroundColor.SetColor(Color.Gainsboro); //Write uploaded data if (sourceData != null && sourceData.Length > 0) { ExcelRange dataRange = worksheet.Cells[2, 1, sourceData.Length + 2, numColumns]; dataRange.LoadFromArrays(sourceData); } //Size columns for (int col = 1; col <= numColumns; col++) { worksheet.Column(col).Width = 65; worksheet.Column(col).Style.Numberformat.Format = "@"; } //Write result MemoryStream fileStream = new MemoryStream(); package.SaveAs(fileStream); fileStream.Position = 0; byte[] data = fileStream.ToArray(); return data; } } }