Utiliza la macro de ONLYOFFICE para reemplazar formas por gráficos

23 noviembre 2022By Sergey

Las presentaciones se han convertido en una parte esencial de nuestra vida. Ya sea una reunión de negocios o un proyecto escolar, las necesitamos para presentar nuestra visión a la audiencia. Ajustar tu presentación de 100 diapositivas puede ser un trabajo un poco tedioso. En esta entrada del blog verás cómo abordar esta tarea con la macro de ONLYOFFICE.

Utiliza la macro de ONLYOFFICE para reemplazar formas por gráficos

Nuestra pequeña macro reemplazará las formas por gráficos en cada diapositiva. Antes de continuar, vamos a explicar el posicionamiento de los elementos. A diferencia de las hojas de cálculo, en las que las filas y las columnas se pueden alcanzar por medio de un índice, podemos dirigirnos a un elemento de la presentación sólo por su posición en la diapositiva. Los elementos se colocan unos encima de otros. Y eso implica que podemos localizarlos metiendo todos los elementos en una matriz y procesando una iteración en ella.

Creación de la macro

Así que, en primer lugar, seleccionamos la presentación activa con el método Api.GetPresentation:

var oPresentation = Api.GetPresentation();

Luego añadimos un bucle For que procesa una iteración en cada diapositiva de la presentación. Así que aquí i es el número total de diapositivas. Y obtenemos cada diapositiva pasándola como un índice:

var oPresentation = Api.GetPresentation();
var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
}

Después, ejecutamos el método GetAllShapes. Recoge todas las formas de la diapositiva y las devuelve en una matriz:

var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
    var aShape  = oSlide.GetAllShapes();
}

Ahora tenemos que eliminar las formas de las diapositivas. Las formas y los dibujos heredan las mismas propiedades, y eso nos permite utilizar el método Delete. Elimina una forma o un dibujo de la diapositiva. En nuestro caso, las formas están ubicadas en la parte inferior. Así que pasamos 0 como índice para eliminar todos los elementos del fondo:

var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
    var aShape  = oSlide.GetAllShapes();
      aShape[0].Delete();
}

Luego añadimos un gráfico implementando el método APi.CreateChart. En los parámetros, especificamos el estilo del gráfico y los datos mostrados:

 var oChart = Api.CreateChart("bar3D", [
  [200, 240, 280],
  [250, 260, 280]
  ], ["Projected Revenue", "Estimated Costs"], [2014, 2015, 2016], 4051300, 2347595, 24);

Después de eso, establecemos el tamaño y la posición en la diapositiva. En nuestro caso, hacemos un gráfico más pequeño y lo centramos. De esta manera, no se superpone al texto. E insertamos el gráfico en la diapositiva ejecutando el método AddObject:

oChart.SetSize(150 * 36000, 90 * 36000);
oChart.SetPosition(3267200, 1000000);
oSlide.AddObject(oChart);

El código completo de la macro es el siguiente:

var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
    var aShape  = oSlide.GetAllShapes();
      aShape[0].Delete();
    var oChart = Api.CreateChart("bar3D", [
       [200, 240, 280],
       [250, 260, 280]
       ], ["Projected Revenue", "Estimated Costs"], [2014, 2015, 2016], 4051300, 2347595, 24);
     oChart.SetSize(150 * 36000, 90 * 36000);
     oChart.SetPosition(3267200, 1000000);
     oSlide.AddObject(oChart);
}

Ahora vamos a ejecutar nuestra macro y ver cómo funciona:

Esperamos que esta pequeña macro extravagante te ayude a optimizar algunas de tus tareas cotidianas. Las macros de ONLYOFFICE son extremadamente versátiles y pueden ser adaptadas a tus necesidades. Recomendamos que aproveches los métodos de nuestra API y crees tus propias macros. No dudes en hacer preguntas o compartir tus ideas con nosotros. Estamos abiertos al debate y a la cooperación. ¡Te deseamos mucha suerte!