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