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

时间:2018-04-16 23:00:45

标签: google-apps-script google-slides-api

我正在进行自动幻灯片设置,根据一些选择退出变量,如果在最终输出中不需要它们,我需要删除一些幻灯片。为了解决这个问题,我创建了一个脚本,为需要删除的幻灯片添加一个简单的文本字符串{{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();
  }
 }
}

有谁能弄明白这里出了什么问题?

2 个答案:

答案 0 :(得分:1)

这次修改怎么样?

修改要点:

  • 删除整个幻灯片的原因是XDocument xdoc = XDocument.Parse(xmlString); var music = xdoc.Descendants().Where(x => x.Name == "music"); var parents = music.Ancestors().Reverse() .Select(a=>new XElement(a.Name.LocalName)).ToArray(); XElement root = new XElement(xdoc.Root.Name.LocalName); XDocument xdoc2 = new XDocument(root); XElement lastAdded = root; for (int i = 1; i < parents.Count(); i++) { lastAdded.Add(parents[i]); lastAdded = parents[i]; } lastAdded.Add(music); Console.WriteLine(xdoc2.ToString()); 之后的;。按此if (currentPresentationSlide[i].getPageElements().indexOf('{{remove-this-slide}}') > -1);;不起作用,if始终运行。
  • 无法从currentPresentationSlide[i].remove();检索文本数据。如果要从文本框中搜索文本,请使用currentPresentationSlide[i].getPageElements()
    • 从您的问题来看,我不确定您要从哪里搜索文本。所以我想你想从形状中搜索文本。形状包括文本框。

修改后的脚本:

currentPresentationSlide[i].getShapes()

参考:

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

答案 1 :(得分:0)

@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;
      }
    }
  }
}