DEV Community

Cover image for ClosedXML y el uso de plantillas
Alonzo Vera
Alonzo Vera

Posted on

ClosedXML y el uso de plantillas

Para facilitar la tarea de crear reportes o documentos en formato XLS o XLSX, se tiene el paquete ClosedXML. El mismo tiene soporte para el uso de templates.

Lo primero que tenemos que hacer es instalar el paquete Nuget en nuestro proyecto:

PM> Install-Package ClosedXML
Enter fullscreen mode Exit fullscreen mode

Después, el bloque de codigo necesario para mostrar un excel a partir de una plantilla es:

var strTitulo = "Titulo del reporte";
var dtReporte = ObtenerDatosReporte(); //Funcion que devolverá un DataTable

//Definimos la plantilla y la utilizamos con la libreria ClosedXML
var template = Server.MapPath("~/doc_templates/Reporte.xlsx");
using (var wb = new XLWorkbook(template))
{
    //Ponemos algunos valores en el documento
    wb.Worksheets.Worksheet(1).Cell(5, 1).Value = strTitulo;

    //Podemos insertar un DataTable
    wb.Worksheets.Worksheet(1).Cell(9, 1).InsertTable(dtReporte);
    //Aplicamos los filtros y formatos a la tabla 
    wb.Worksheets.Worksheet(1).Table("Table1").ShowAutoFilter = true;
    wb.Worksheets.Worksheet(1).Table("Table1").Style.Alignment.Vertical =
        XLAlignmentVerticalValues.Center;
    wb.Worksheets.Worksheet(1).Columns(2, 2 + dtReporte.Columns.Count).AdjustToContents();

    //Limitamos el ancho de las columnas a 60
    foreach (var column in wb.Worksheets.Worksheet(1).Columns())
        if (column.Width > 60)
        {
            column.Width = 60;
            column.Style.Alignment.WrapText = true;
        }

    wb.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
    wb.Style.Font.Bold = true;

    //Enviamos el archivo al cliente
    Response.Clear();
    Response.Buffer = true;
    Response.Charset = "";
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("content-disposition", "attachment;filename=\"" + strTitulo + ".xlsx\"");

    using (var myMemoryStream = new MemoryStream())
    {
        wb.SaveAs(myMemoryStream);
        myMemoryStream.WriteTo(Response.OutputStream);
        Response.Flush();
        Response.End();
    }
}
Enter fullscreen mode Exit fullscreen mode

Para acceder a la documentación del proyecto, pueden ingresar a su repositorio

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more