Como les mencioné en mi publicación previa, C#: Creando archivos PDF con iTextSharp, esta vez voy a estar discutiendo cómo crear archivos de excel en C# con la librería de código abierto EPPlus. EPPlus, como mencioné anteriormente, es una librería para la plataforma .Net que nos permite crear y manejar archivos de excel, entiendase con extensión xls o xlsx, con mucha facilidad y de una forma elegante.

Dentro de lo que podemos hacer con EPPlus se encuentra:

  • Insertar data celda por celda
  • Utilizar formulas
  • Crear graficas
  • Pivot tables

Estas son algunas de las muchas ventajas que nos ofrece EPPlus. Así que vamos a demostrar la funcionalidad de EPPlus con los siguientes ejemplos.

Crear el objecto de excel

Luego de descargar EPPlus y añadir la referencia en nuestro proyecto, usamos el siguiente pedazo de código para crear nuestro objecto que finalmente se convertirá en nuestro archivo de excel.

// Creamos el archivo
ExcelPackage ep = new ExcelPackage();

//Le añadimos los 'worksheets' que necesitemos.
//En este caso añadiremos solo uno
ep.Workbook.Worksheets.Add("Worksheet de Prueba");

//Creamos un objecto tipo ExcelWorksheet para
//manejarlo facilmente.
ExcelWorksheet ew1 = ep.Workbook.Worksheets[1];

Manipular una celda

Muy bien, ya tenemos nuestro objeto creado y listo para empezar a poblarlo con data. Hay varias maneras de insertar data en el objecto. La manera más básica y sencilla es a una celda en específico. Hay dos maneras de hacer referencia a las celdas. La primera es usando índices, por ejemplo ew1.Cells[1, 1] hace referencia a la celda A1. Es importante mencionar que para esta manera los índices se interpretan de la siguiente manera ew1.Cells[fila, columna]. Quiere decir que para hacer referencia a la celda B5 lo índices serían ew1.Cells[5, 2]. La segunda manera es utilizando la referencia como la vemos en excel, por ejemplo ew1.Cells[“A1”] hace referencia también a la celda A1. Ambas maneras son válidas y hacen exactamente lo mismo.

// Definir el valor de una celda de ambas maneras
ew1.Cells[1, 1].Value = "Hello World";
ew1.Cells["A1"].Value = "Hello World";

// Unir dos o mas celdas de ambas maneras
ew1.Cells[1, 1, 1, 4].Merge = true;
ew1.Cells["A1:D1"].Merge = true;

// Aplicar estilo al tipo de letra
ew1.Cells[1, 1].Style.Font.Bold = true;
ew1.Cells["A1"].Style.Font.Bold = true;

Aplicarle estilo a las celdas

Además de poner data, también queremos que nuestro reporte salga lo más presentable posible. Por esta razón le presento algunos ejemplos de los estilos más usados.

// Definir el estilo de los bordes de la celda(s)
ew1.Cells["A1"].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Double;

// Definir la alineación horizontal y vertical
ew1.Cells["A1"].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Left;
ew1.Cells["A1"].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;

// Definir el estilo del tipo de letra
ew1.Cells["A1"].Style.Font.Bold = true;

Utilizar intervalo de celdas

Al igual que hacer referencia a una celda en específico, hacer referencia a un intervalo de celdas es sumamente sencillo.

// Las 2 maneras de hacer referencia a un intervalo de celdas.
ew1.Cells["A1:C5"]
ew1.Cells[1,1,5,3]

Cabe mencionar que, al igual que las celdas, los índices de los intervalos se interpretan de la siguiente manera ew1.Cells[filaDesde, columnaDesde, filaHasta, columnaHasta]. A los intervalos se le pueden aplicar los estilos antes mencionados de la misma manera.

// Definir el estilo de los bordes del intervalo de celdas
ew1.Cells["A1:C5"].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Double;
ew1.Cells[1,1,5,3].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Double;

Utilizar formulas

De aquí en adelante es que se ve realmente la utilidad y el poder de EPPlus. EPPlus nos permite hacer uso de las formulas que Excel provee como por ejemplo SUM y COUNT.

// Las dos líneas de código generan exactamente el mismo resultado
ew1.Cells[10, 1].Formula = "SUM(" + ew1.Cells[1, 1].Address + ":" + ew1.Cells[9, 1].Address + ")";
ew1.Cells["A10"].Formula = "SUM(A1:A9)";

Insertar un DataTable

Si su data proviene de una base de datos y la tiene presente en un objeto de tipo DataTable, insertarla en en objeto es sumamente fácil.

//La función LoadFromDataTable transfiere la data del objeto DataTable al objecto de excel.
ew1.Cells["A1"].LoadFromDataTable(dt, true);

En la función LoadFromDataTable se transfiere la data del objeto DataTable al objecto de excel. El segundo parámetro indica si se va a escribir el nombre de las columnas del objeto DataTable al objecto de excel. En este caso queremos poner el nombre de las columnas así que le asignamos true.

Crear una gráfica

Otra de las grandes ventajas de EPPlus es que nos permite crear gráficas desde nuestro código. Hay una gran variedad de tipo de gráficas que podemos seleccionar para que nuestro reporte quede lo más completo y profesional posible. En este caso vamos a utilizar gráfica de columnas.

var chart = ew1.Drawings.AddChart("nombre de la gráfica", OfficeOpenXml.Drawing.Chart.eChartType.ColumnClustered);
chart.Title.Text = "Título de la gráfica";
chart.SetPosition(numFila, 0, numColumna, 0);
chart.SetSize(800, 500); // Tamaño de la gráfica
chart.Legend.Remove(); // Si desea eliminar la leyenda

// Define donde está la información de la gráfica.
// Entiendase el nombre de la serie y los valores.
var serie = chart.Series.Add(ew1.Cells["C1:C10"], ew1.Cells["A1:A10"]);

EPPlus es una herramienta sumamente útil y de uso muy simple que nos ayuda a generar reportes profesionalmente y de muy alta utilidad.