phronCare/Transversal/Services/XLSXExportBase.cs

61 lines
2.2 KiB
C#

using OfficeOpenXml;
using OfficeOpenXml.Table;
namespace Transversal.Services
{
public class XLSXExportBase : IXLSXExportBase
{
public byte[] ExportExcel<T>(IEnumerable<T> 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();
}
}
}
}
}