phronCare/Services/Services/XLSXExport.cs

59 lines
1.8 KiB
C#

using OfficeOpenXml;
using OfficeOpenXml.Style;
using Services.Interfaces;
namespace Services.Services
{
public class XLSXExport : IXLSXExport
{
public XLSXExport() { }
public byte[] ExportExcel<T>(IEnumerable<T> datos)
{
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.LightGray);
}
// 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++;
}
// 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();
}
}
}
}
}