using OfficeOpenXml; using OfficeOpenXml.Table; namespace Transversal.Services { public class XLSXExportBase : IXLSXExportBase { public byte[] ExportExcel(IEnumerable datos) { ExcelPackage.LicenseContext = LicenseContext.NonCommercial; using (var package = new ExcelPackage()) { var worksheet = package.Workbook.Worksheets.Add("Datos"); // Obtener las propiedades de T var propiedades = typeof(T).GetProperties(); // Agregar estilo a la primera fila (encabezados) //using (var rng = worksheet.Cells[1, 1, 1, propiedades.Length]) //{ // rng.Style.Font.Bold = true; // rng.Style.Fill.PatternType = ExcelFillStyle.Solid; // rng.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightSteelBlue); //} // Agregar encabezados for (int i = 0; i < propiedades.Length; i++) { worksheet.Cells[1, i + 1].Value = propiedades[i].Name; } // Agregar datos int row = 2; foreach (var item in datos) { for (int i = 0; i < propiedades.Length; i++) { worksheet.Cells[row, i + 1].Value = propiedades[i].GetValue(item); } row++; } // Formato de tabla var tabla = worksheet.Tables.Add(new ExcelAddressBase(1, 1, row - 1, propiedades.Length), "Datos"); tabla.TableStyle = TableStyles.Light13; // Ajuste automático de columnas worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns(); // Guardar el libro de trabajo en un MemoryStream using (var stream = new MemoryStream()) { package.SaveAs(stream); stream.Position = 0; // Devolver el archivo como un array de bytes return package.GetAsByteArray(); } } } } }