Crea una macro de ONLYOFFICE para sustituir palabras en tus presentaciones

15 noviembre 2023By Sergey

Hay varios casos en los que, al crear una presentación, necesitamos cambiar todas las apariciones de una palabra concreta. Las correcciones manuales pueden llevar mucho tiempo, especialmente si tienes muchas diapositivas con las que tienes que trabajar. Para facilitar este proceso, vamos a crear una macro para reemplazar una palabra específica en el Editor de presentaciones.

Crea una macro de ONLYOFFICE para sustituir palabras en tus presentaciones

Creación de la macro

const oPresentation = Api.GetPresentation(); //get the current presentation

En primer lugar, obtenemos la presentación actual en la variable oPresentation.

for (
    var slideIndex = 0;
    slideIndex < oPresentation.GetSlidesCount();
    slideIndex++
  ) {

Esta macro implica bucles for anidados. En este primer bucle for, iteramos a través de todas las diapositivas de la presentación.

var oSlide = oPresentation.GetSlideByIndex(slideIndex);
var aShape = oSlide.GetAllShapes(); //get all the shapes from different slides

Estas líneas obtienen todas las formas que pueden estar presentes en una diapositiva en particular e introducen sus detalles en la matriz aShape.

for (var shapeIndex = 0; shapeIndex < aShape.length; shapeIndex++) {
      var content = aShape[shapeIndex].GetDocContent();

En este segundo bucle for, obtenemos el contenido de cada forma de una hoja de cálculo concreta.

if (content) {
        var count = content.GetElementsCount();
        for (var elementIndex = 0; elementIndex < count; elementIndex++) {
          var element = content.GetElement(elementIndex);

Nos aseguramos de que la variable content existe, y obtenemos el recuento de todos los elementos presentes en content.

if (element) {
            const rawText = element.GetText(); //gets the text from a particular element
            element.Delete(); //delete the content
            const wordToFind = "apple"; // Replace "apple" with the word you want to find
            const replacementWord = "banana"; // Replace "banana" with the word you want to replace it with
            const cleanedText = rawText.replace(
              new RegExp(wordToFind, "g"),
              replacementWord
            );

Primero, nos aseguramos de que el elemento variable es válido. Si el elemento existe, copiamos el texto original y borramos el contenido utilizando el método element.delete().

A continuación, especificamos la palabra a reemplazar y la palabra de reemplazo en sus respectivas variables, y realizamos el reemplazo, almacenando el nuevo texto en la variable cleanedText.

 var oParagraph = Api.CreateParagraph();
 var oRun = Api.CreateRun();
 oRun.AddText(cleanedText);
 oParagraph.AddElement(oRun);
 content.Push(oParagraph);

Finalmente, creamos un nuevo párrafo, y le añadimos el texto limpiado. Una vez configurado el elemento párrafo, lo añadimos de nuevo a la diapositiva, sustituyendo al que habíamos eliminado anteriormente, utilizando el código anterior.

Código completo de la macro

Este es el código completo de la macro:

(function () {
  const oPresentation = Api.GetPresentation(); //get the current presentation
  for (
    var slideIndex = 0;
    slideIndex < oPresentation.GetSlidesCount();
    slideIndex++
  ) {
    var oSlide = oPresentation.GetSlideByIndex(slideIndex);
    var aShape = oSlide.GetAllShapes(); //get all the shapes from different slides

    for (var shapeIndex = 0; shapeIndex < aShape.length; shapeIndex++) {
      var content = aShape[shapeIndex].GetDocContent();

      // Check if content exists before proceeding
      if (content) {
        var count = content.GetElementsCount();
        for (var elementIndex = 0; elementIndex < count; elementIndex++) {
          var element = content.GetElement(elementIndex);

          // Check if element is valid before using it
          if (element) {
            const rawText = element.GetText(); //gets the text from a particular element

            element.Delete(); //delete the content

            const wordToFind = "apple"; // Replace "apple" with the word you want to find
            const replacementWord = "banana"; // Replace "banana" with the word you want to replace it with
            const cleanedText = rawText.replace(
              new RegExp(wordToFind, "g"),
              replacementWord
            );

            //creates a new paragragh, and restores the content which was deleted, with the cleaned text.
            var oParagraph = Api.CreateParagraph();
            var oRun = Api.CreateRun();
            oRun.AddText(cleanedText);
            oParagraph.AddElement(oRun);
            content.Push(oParagraph);
          }
        }
      }
    }
  }
})();

¡Vamos a ejecutar nuestra macro para ver los resultados!

Esperamos que esta macro te haya servido de ayuda y haya agilizado el flujo de trabajo de tus presentaciones.

No pierdas la oportunidad de aprovechar el poder de la API de ONLYOFFICE. Nuestra amplia biblioteca de métodos API es tu llave para transformar tus ideas en realidad. Si tienes alguna pregunta o concepto innovador, te invitamos a compartirlo con nosotros. Tu aportación es muy valorada, y nos entusiasma la posibilidad de colaborar contigo. Te deseamos mucha suerte en tus esfuerzos exploratorios.