A veces las herramientas de reportería existentes no son flexibles a la hora de crear ciertos reportes que requieren un grado de complejidad muy alto, especialmente cuando tratamos con gráficos dinámicos.
Una solución para esto es exportar los datos directamente a un libro en Excel, facilitando la edición y permitiendo a usuario satisfacer las necesidades de representación de información.
Se requiere la librería que se instala con la suit de office llamada: Microsoft.Office.Interop.Excel.
He realizado pruebas en versiones de office 2010, 2013 y 2016 y el código funciona sin problemas.
static void ExportaExcel(IEnumerable<Empleados> accounts)
{
var excelApp = new Excel.Application();
excelApp.Visible = true;
excelApp.Workbooks.Add();
Excel._Worksheet workSheet = excelApp.ActiveSheet;
// En versiones anteriores de C# se requiere una conversión
explícita //Excel._Worksheet workSheet =
Excel.Worksheet)excelApp.ActiveSheet;
workSheet.Cells[3, "A"] = "ID Number";
workSheet.Cells[3, "B"] = "Nombre";
workSheet.Cells[3, "C"] = "Salario";
workSheet.Cells[1, "A"] = "Listado de Empleados";
workSheet.Range["A1", "C1"].Merge();
workSheet.Range["A1", "C1"].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
workSheet.Range["A1", "C1"].Font.Bold = true;
workSheet.Range["A1", "C1"].Font.Size = 20;
var row = 3;
foreach (var acct in accounts)
{
row++;
workSheet.Cells[row, "A"] = acct.ID;
workSheet.Cells[row, "B"] = acct.Nombre;
workSheet.Cells[row, "C"] = acct.Salario;
}
workSheet.Columns[1].AutoFit();
workSheet.Columns[2].AutoFit();
workSheet.Columns[3].AutoFit();
workSheet.Range["A3", "C5"].AutoFormat(Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);
}
//Este código crea una lista de dos registros y hace el llamando al método anterior. Este debe copiarse en el evento click del botón donde se desea hacer la exportación.
var ListadoEmpleados = new List<Empleados>
{
new Empleados {
ID = 345678,
Nombre = "Luis Manuel Calderón Molina",
Salario = 1500.35
},
new Empleados {
ID = 1230221,
Nombre = "Miriam Scarleth Moreno López",
Salario = 1200
}
};
DisplayInExcel(ListadoEmpleados);
Puedes descargar el código fuente completo en el siguiente enlace: