如何用 ONLYOFFICE 宏替换演示文稿中的文字

2023年11月16日作者: Mona

在进行演示时,有很多情况我们需要更改特定单词的所有出现。手动更正可能非常耗时,尤其是当您有大量幻灯片需要处理时。为了简化此过程,我们来构建一个宏,替换演示文稿编辑器中的特定单词。

Créez une macro ONLYOFFICE pour remplacer des mots dans vos présentations

构建宏

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

首先,我们在 oPresentation 变量中获取当前的演示文稿。

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

该宏涉及嵌套的 for 循环。在第一个 for 循环中,我们迭代演示文稿中的所有幻灯片。

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

这些行获取特定幻灯片中可能出现的所有形状,并将其详细信息推送到 aShape 数组中。

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

在第二个 for 循环中,我们获取特定电子表格上每个形状的内容。

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

我们确保 content 变量存在,并获取 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
            );

首先我们确保变量元素有效。如果元素存在,我们复制原始文本并使用 element.delete() 方法删除内容。

接下来,我们在各自的变量中指定要替换的单词和替换单词,并执行替换,将新文本存储在 cleanText 变量中。

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

最后,我们创建一个新段落,并将清理后的文本添加到其中。设置段落元素后,我们使用上面的代码将其添加回幻灯片,替换上面删除的元素。

完整的宏代码

这是宏的完整代码:

(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);
          }
        }
      }
    }
  }
})();

让我们运行宏看看效果!

我们希望这个宏对你有所帮助,可以简化您的工作流程。

不要错过利用 ONLYOFFICE API 强大功能的机会。我们丰富的 API 方法库是将您的想法变为现实的关键。如果您有任何问题或创新概念,欢迎与我们分享。您的意见非常有价值,我们很高兴能够与您合作。祝您的探索之路好运!