【问题标题】:Clear text formatting in Slides using Apps Script使用 Apps 脚本在幻灯片中清除文本格式
【发布时间】:2018-09-29 15:11:32
【问题描述】:

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

删除格式实际上是根据幻灯片的主题或母版恢复到原始文本属性

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

我试过了,

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

但是,它不会恢复它的字体大小和字体系列,因为我没有找到获取占位符默认字体大小和字体系列的方法。

是否有可用的解决方法?如何取消设置fontfamily和fontsize?

更新:(不工作)

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

这将引发服务器错误

【问题讨论】:

  • 通常将属性设置为null 可用于发出将其删除的信号。如果这引发错误,您需要在问题 sn-p 中包含更多代码,以便清楚地知道正在操作哪些类。
  • 不,它不起作用。我已经对问题进行了更新
  • @Maurice Codik 有什么解决方法吗?
  • 我在本机应用程序脚本中没有很好的解决方法。如果您准备使用 Slides advanced service,您可以通过 batchUpdatePresentation 使用 updateTextStyleRequest 来实现。
  • 非常感谢Codik,你能帮我做一个小sn-p吗?非常感谢。

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


【解决方案1】:

这个解决方法怎么样?我认为这种情况有两种模式。根据您的问题,在此答案中,它清除了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。对于updateTextStyleSlides.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": "*"

参考资料:

【讨论】:

  • @Code Guy 我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,请随时告诉我。我想学习解决你的问题。
  • @Code Guy 感谢您的回复。我很高兴这对你有用。关于您的其他问题,当您想清除颜色等格式时,请查看幻灯片 API 的updateTextStyle 字段。您也可以从我的回答中看到它。如果要选择对象,可以在stackoverflow.com/questions/52630036/…查看示例脚本
  • @Code Guy 关于I observed that, the undo function will not undo the changes done via the batch request API. Is there a way to achive?,我还找不到解决方法。我真的很抱歉我的技能不好。
  • @Code Guy 感谢您的回复。我想学习越来越多。顺便说一句,关于Sheets API“撤消”的一种解决方法,在更新工作表之前保存值如何?在这种情况下,很遗憾,无法使用快捷键。
  • @Code Guy 我为我的拙劣技能道歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多