Hola a todos!
Espero que estéis bien!. El post de hoy va sobre el tratamiento de gráficos en typescript con Office Script.
A lo largo de todas las publicaciones en Excel Signum el tratamiento de gráficos y dashboard no es algo en lo que haya profundizado y los post se pueden contar con los dedos de una mano. La razón es que siempre sentí más interés por la programación y el procesamiento de datos antes que la visualización y el análisis.
Creo que para que esto último funcione es necesario que lo primero se realice de forma correcta. La calidad de los datos, la programación para conseguirla y mantenerla es fundamental. Por supuesto, la automatización que proporciona el programar en VBA, Typescript, lenguaje M, etc. es otro punto a favor.
Sin embargo, hoy quiero mostrar como podemos añadir gráficos con programación basada en typescript y además ser capaces de alinearlos en un determinado rango. También aprovecharé para mostrar cómo podemos modificar algunos elementos de nuestros gráficos.
El ejemplo que voy a usar es el siguiente, imaginad estos datos, la población de los tres últimos años por CCAA en España:

Crearé cuatro gráficos desde el editor de typescript y los colocaré en un cuadrado, de este modo:

El código es el siguiente:
function main(workbook: ExcelScript.Workbook)
{
let miHoja = workbook.getWorksheet("Hoja1");
//insertamos gráfico1
let mi_grafico_1 = miHoja.addChart(ExcelScript.ChartType.barClustered,
miHoja.getRange("A1:D20"));
//añadimos título del gráfico
mi_grafico_1.getTitle().setText("GRÁFICO DE BARRAS");
//indicamos tamaño de título de gráfico
mi_grafico_1.getTitle().getFormat().getFont().setSize(10);
//indicamos color de fondo de área de título de gráfico
mi_grafico_1.getTitle().getFormat().getFill().setSolidColor("#D9D9D9");
//colocamos gráfico en el rango
let miRango = miHoja.getRange("F3:K17");
mi_grafico_1.setTop(miRango.getTop());
mi_grafico_1.setLeft(miRango.getLeft());
mi_grafico_1.setWidth(miRango.getWidth());
mi_grafico_1.setHeight(miRango.getHeight());
//insertamos gráfico2
let mi_grafico_2 = miHoja.addChart(ExcelScript.ChartType.pyramidBarStacked,miHoja.getRange("A1:D20"));
mi_grafico_2.getTitle().setText("GRÁFICO DE BARRAS PIRAMIDAL");
//indicamos tipo de letra en título de gráfico
mi_grafico_2.getTitle().getFormat().getFont().setName("Arial");
mi_grafico_2.getTitle().getFormat().getFont().setSize(9);
//indicamos letra negrita en título de gráfico
mi_grafico_2.getTitle().getFormat().getFont().setBold(true);
//colocamos gráfico en el rango
let miRango_2 = miHoja.getRange("F19:K33");
mi_grafico_2.setTop(miRango_2.getTop());
mi_grafico_2.setLeft(miRango_2.getLeft());
mi_grafico_2.setWidth(miRango_2.getWidth());
mi_grafico_2.setHeight(miRango_2.getHeight());
//insertamos gráfico3
let mi_grafico_3 = miHoja.addChart(ExcelScript.ChartType.columnStacked, miHoja.getRange("A1:D20"));
mi_grafico_3.getTitle().setText("GRÁFICO DE COLUMNAS APILADAS");
mi_grafico_3.getTitle().getFormat().getFill().setSolidColor("#FFFF00");
//cambiamos color de fondo en las categorías
mi_grafico_3.getAxes().getCategoryAxis().getFormat().getFill().setSolidColor("#FFFF00");
//colocamos gráfico en el rango
let miRango_3 = miHoja.getRange("M3:R17");
mi_grafico_3.setTop(miRango_3.getTop());
mi_grafico_3.setLeft(miRango_3.getLeft());
mi_grafico_3.setWidth(miRango_3.getWidth());
mi_grafico_3.setHeight(miRango_3.getHeight());
//insertamos gráfico4
let mi_grafico_4 = miHoja.addChart(ExcelScript.ChartType.doughnut, miHoja.getRange("A1:D20"));
mi_grafico_4.getTitle().setText("GRÁFICO DE ANILLOS");
//añadimos ancho a los anillos del gráfico
mi_grafico_4.getSeries()[2].setDoughnutHoleSize(30);
//colocamos gráfico en el rango
let miRango_4 = miHoja.getRange("M19:R33");
mi_grafico_4.setTop(miRango_4.getTop());
mi_grafico_4.setLeft(miRango_4.getLeft());
mi_grafico_4.setWidth(miRango_4.getWidth());
mi_grafico_4.setHeight(miRango_4.getHeight());
}
Como podéis observar, se van añadiendo cuatro gráficos de distinto tipo. He ido comentando qué es lo que hace cada línea de código para mayor claridad.
Especialmente importante es el bloque en el que se especifica el rango en el que se colocará el grafico generado:
let miRango = miHoja.getRange("F3:K17");
mi_grafico_1.setTop(miRango.getTop());
mi_grafico_1.setLeft(miRango.getLeft());
mi_grafico_1.setWidth(miRango.getWidth());
mi_grafico_1.setHeight(miRango.getHeight());
En este caso he añadido todo el dimensionamiento para que que el gráfico sea de un tamaño concreto, el del rango.
En el resto de código he añadido ejemplo de cómo formatear el título (letra, tamaño y color de fondo) y también otros elementos que veréis comentados.
Y esto es todo!. Espero que os sea de utilidad.
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies