使用Apps脚本清除幻灯片中的文本格式

时间:2018-09-29 15:11:32

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

我有一个带有文本框以及不同形状的幻灯片。我需要删除页面元素内所有文本的格式。

删除格式实际上基于幻灯片的主题或母版恢复为原始文本属性

我没有找到任何清除格式并将其恢复为基本格式的功能。

我尝试过,

setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false)

但是,由于我没有找到获取占位符默认字体大小和字体家族的方法,因此它将无法恢复其字体大小和字体家族。

是否有解决方法?如何取消设置字体家族和字体大小?

更新:(不起作用)

text.getTextStyle().setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false).setFontFamily("").setFontFamily("").setFontSize(null);

这将引发服务器错误

1 个答案:

答案 0 :(得分:2)

该解决方法如何?我认为这种情况有两种模式。从您的问题中,此答案将清除underline, italic, bold, strikethrough, fontFamily and fontSize的格式。在此答案中,“清除”表示将其修改为默认格式。

解决方法1:

使用幻灯片服务。首先,它检索文本样式的默认值。作为示例,将包含文本值的文本框放到幻灯片上。在这种情况下,文本值的格式不会更改。使用Slides API,可以按以下方式检索默认文本样式。

"style": {
 "underline": false,
 "italic": false,
 "bold": false,
 "strikethrough": false,
 "fontFamily": "Arial",
 "fontSize": {
  "magnitude": 14,
  "unit": "PT"
 }
}

在此替代方法中,这些值用作默认值。示例脚本如下。

示例脚本:

在此示例中,将SHAPE和TABLE的PageElementType的文本样式修改为默认格式。

function toDefault(text) {
  if (text.getRange(0,1).asString().charCodeAt(0) != 10) {
    var style = text.getTextStyle();
    return style.setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false).setFontFamily("Arial").setFontSize(14);
  }
  return null;
}

function myFunction() {
  var s = SlidesApp.getActivePresentation();
  var slide = s.getSlides()[0]; // As a sample, 1st page is used.
  var pageElements = slide.getPageElements();
  pageElements.forEach(function(e) {
    if (e.getPageElementType() == "SHAPE") {
      var text = e.asShape().getText(); 
      toDefault(text);
    } else if (e.getPageElementType() == "TABLE") {
      var table = e.asTable();
      for (var row = 0; row < table.getNumRows(); row++) {
        for (var col = 0; col < table.getNumColumns(); col++) {
          var text = table.getCell(row, col).getText();
          toDefault(text);
        }
      }
    }
  });
}

解决方法2:

使用幻灯片API。对于updateTextStyle中的Slides.Presentations.batchUpdate(),当仅使用"fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"而不设置每个值时,将使用underline,italic,bold,strikethrough,fontFamily,fontSize的默认值。在此替代方法中,将使用此方法。

示例脚本:

在此示例中,将SHAPE和TABLE的PageElementType的文本样式修改为默认格式。

function myFunction() {
  var s = SlidesApp.getActivePresentation();
  var slide = s.getSlides()[0];
  var presentationId = s.getId();
  var pageElements = slide.getPageElements();
  var reqs = pageElements.reduce(function(o, e) {
    if (e.getPageElementType() == "SHAPE") {
      if (e.asShape().getText().getRange(0,1).asString().charCodeAt(0) != 10) {
        o.push({"updateTextStyle": {"objectId": e.getObjectId(), "fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"}});
      }
    } else if (e.getPageElementType() == "TABLE") {
      var table = e.asTable();
      var objectId = e.getObjectId();
      for (var row = 0; row < table.getNumRows(); row++) {
        for (var col = 0; col < table.getNumColumns(); col++) {
          var text = table.getCell(row, col).getText();
          if (text.getRange(0,1).asString().charCodeAt(0) != 10) {
            o.push({"updateTextStyle": {"objectId": e.getObjectId(), "cellLocation": {"columnIndex": row, "rowIndex": col}, "fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"}});
          }
        }
      }
    }
    return o;
  }, []);
  var resource = {"requests": reqs};
  Slides.Presentations.batchUpdate(resource, presentationId);
}

注意:

  • 使用解决方法2时,请在高级Google服务和API控制台上启用Slides API。
  • 如果您要清除文本样式的所有格式,请针对变通方法2,将其从"fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"修改为"fields": "*"

参考: