59 lines
1.8 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|