Excel y .NET, malos amigos: Cambiar el rango de datos a un gráfico

Como casi todos los hemos programado algo para .NET, hemos visto la potencia que tiene. Pero cuando ponemos de nuevo los pies en la tierra es cuando tenemos que volver a usar los objetos COM de Windows.

Arrrrggg… Malditos. ¡Luego me preguntarán que porqué odio a muerte el Office!.

Imaginaros el caso: Un excel «plantilla», donde solo hay que rellenar ciertos datos, pero con unas columnas de datos de longitud dinámica, puede haber desde 10 a 300. Como no, la cosa se complica, también quieren un gráfico que sea variable (es decir, si solo hay 5 datos, que muestre 5, y si hay mas pues mas…). Todo esto se arregla fácilmente con una macro o con una complicada función de esas que trae excel.

Pero ya que el excel lo rellena un programa en .NET (C# para ser mas exactos) lo vamos ha hacel elegantemente:

// Elegir el Gráfico a modificar, es curioso pero si tipo lo declarais con "Chart" en vez de "_Chart" también funciona
Microsoft.Office.Interop.Excel._Chart chart = (Microsoft.Office.Interop.Excel._Chart)objWorkbook.Charts["Mi gráfico"];

// Ahora a cambiar las series que tienen que estar definidas, se podria utilizar el nombre tambien
// FILA es un double donde esta la fila donde acaban los datos
serie = (Microsoft.Office.Interop.Excel.Series) chart.SeriesCollection(1);
serie.XValues = objSheet.get_Range("A4", "A" + Math.Floor(Fila));
serie.Values = objSheet.get_Range("C4", "C" + Math.Floor(Fila));
// Otra serie que tiene el gráfico
serie = (Microsoft.Office.Interop.Excel.Series) chart.SeriesCollection(2);
serie.Values = objSheet.get_Range("D4", "D" + Math.Floor(Fila));

Tachán… tus gráficos con datos dinámicos en un par de líneas. Eso si, tras mucho pensar 🙂

Please follow and like us: