删除包含特定文本字符串的幻灯片

Delete slides that contain a specific text string

我正在处理自动幻灯片设置,并且根据一些选择退出变量,如果最终输出中不需要它们,我需要删除一些幻灯片。为了解决这个问题,我创建了一个脚本,该脚本将一个简单的文本字符串 {{remove-this-slide}} 添加到需要删除的幻灯片中。

但是,当尝试获取脚本来删除包含该字符串的幻灯片时,它会不断删除我的整个演示文稿...

这是我的:

function deleteFunction() {
var currentPresentationSlide = SlidesApp.getActivePresentation().getSlides();
  for (i = 0; i < currentPresentationSlide.length; i++) {
    if (currentPresentationSlide[i].getPageElements().indexOf('{{remove-this-slide}}') > -1); {
    currentPresentationSlide[i].remove();
  }
 }
}

谁能知道这里出了什么问题?

这个修改怎么样?

修改点:

  • 删除整张幻灯片的原因是 if (currentPresentationSlide[i].getPageElements().indexOf('{{remove-this-slide}}') > -1); 之后的 ;。通过这个 ;if 不起作用并且 currentPresentationSlide[i].remove(); 总是 运行.
  • 无法从 currentPresentationSlide[i].getPageElements() 检索文本数据。当您想从文本框中搜索文本时,请使用currentPresentationSlide[i].getShapes()
    • 根据你的问题,我不确定你想从哪里搜索文本。所以我假设您想从形状中搜索文本。该形状包括文本框。

修改脚本:

function deleteFunction() {
  var currentPresentationSlide = SlidesApp.getActivePresentation().getSlides();
  for (i = 0; i < currentPresentationSlide.length; i++) {
    var shapes = currentPresentationSlide[i].getShapes();
    for (j = 0; j < shapes.length; j++) {
      if (shapes[j].getText().asString().indexOf('{{remove-this-slide}}') > -1) {
        currentPresentationSlide[i].remove();
      }
    }
  }
}

参考:

如果我误解了你的问题,我很抱歉。

@Tanaike 的代码中有一个小错误。因为同一张幻灯片中可能有更多的形状,所以你必须在删除幻灯片后打破循环。

否则代码会尝试遍历已删除幻灯片的形状,从而产生错误。

所以正确的片段看起来像:

function deleteFunction() {
  var currentPresentationSlide = SlidesApp.getActivePresentation().getSlides();
  for (i = 0; i < currentPresentationSlide.length; i++) {
    var shapes = currentPresentationSlide[i].getShapes();
    for (j = 0; j < shapes.length; j++) {
      if (shapes[j].getText().asString().indexOf('{{remove-this-slide}}') > -1) {
        currentPresentationSlide[i].remove();
        break;
      }
    }
  }
}