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 🙂
Pingback: Bitacoras.com
Pingback: Excel y .NET, malos amigos (II): Proteger un Excel y su contenido | Ni’palante Ni’patras