Crie uma macro do ONLYOFFICE para substituir palavras em suas apresentações

15 novembro 2023By Klaibson

Existem vários casos ao fazer uma apresentação em que precisamos alterar todas as ocorrências de uma palavra específica. As correções manuais podem consumir muito tempo, especialmente se você tiver muitos slides para trabalhar. Para facilitar esse processo, construiremos uma macro para substituir uma palavra específica no Editor de Apresentação.

Crie uma macro do ONLYOFFICE para substituir palavras em suas apresentações

Construindo a Macro

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

Primeiro, obtemos a apresentação atual na variável oPresentation.

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

Esta macro envolve loops for aninhados. Neste primeiro loop for, iteramos por todos os slides da apresentação.

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

Essas linhas obtêm todas as formas que podem estar presentes em um slide específico e colocam seus detalhes na matriz aShape.

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

Neste segundo loop for, obtemos o conteúdo de cada forma em uma planilha específica.

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

Garantimos que a variável content existe e obtemos a contagem de todos os elementos presentes in 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
            );

Primeiro, certificamo-nos de que o elemento variável é válido. Se o elemento existir, copiamos o texto original e excluímos o conteúdo usando o método element.delete(). Em seguida, especificamos a palavra a ser substituída e a palavra substituta em suas respectivas variáveis, e realizamos a substituição, armazenando o novo texto na variável cleanText.

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

Finalmente, criamos um novo parágrafo e adicionamos o CleanText a ele. Após a configuração do elemento de parágrafo, nós o adicionamos novamente ao slide, substituindo aquele que havíamos excluído acima, usando o código acima.

Código de macro completo

Aqui está todo o código da 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 executar nossa macro e ver os resultados!

Esperamos que esta macro tenha ajudado você e simplificado seu fluxo de trabalho de apresentação.

Não perca a chance de aproveitar o poder da API ONLYOFFICE. Nossa extensa biblioteca de métodos API é a chave para transformar suas ideias em realidade. Se você tiver alguma dúvida ou conceitos inovadores, encorajamos você a compartilhar conosco. Sua contribuição é altamente valorizada e estamos entusiasmados com a possibilidade de colaborar com você. Boa sorte em seus empreendimentos exploratórios!