【问题标题】:Remove all hyperlinks of a Google Slide using GAS使用 GAS 删除 Google 幻灯片的所有超链接
【发布时间】:2020-05-08 04:22:49
【问题描述】:

我正在尝试删除幻灯片的所有超链接。

以下是我尝试过但不起作用的代码。你能告诉我哪里出错了吗?

function run()
{
var ppt = SlidesApp.getActivePresentation();
var slide = ppt.getSlides()[0];

var pe  = slide.getPageElements();

var startOffset = pe[0].asShape().getText().getLinks()[0].getStartIndex();
var endOffset = pe[0].asShape().getText().getLinks()[0].getEndIndex();
pe[0].asShape().getText().getRange(startOffset, endOffset).getTextStyle().setLinkUrl(null)

}

【问题讨论】:

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


    【解决方案1】:

    我相信你的目标如下。

    • 第一季度。您想知道脚本问题的原因。
    • 第二季度。您想使用 Google Apps 脚本删除 Google 幻灯片中幻灯片中的所有超链接。

    对于这个,这个答案怎么样?

    A1:

    在您的脚本中,setLinkUrl(null) 用于删除链接。这是你的问题的原因。在这种情况下,请使用removeLink() 而不是setLinkUrl(null)Ref

    A2:

    在您的脚本中,您尝试删除第一页第一个形状中文本的第一个超链接。这是你的问题的原因。为了在 Google 幻灯片中删除幻灯片中的所有超链接,下面的示例脚本怎么样?

    示例脚本:

    function myFunction() {
      const slides = SlidesApp.openById("###").getSlides();  // Please set the Slides ID.
    
      const otherTypes = {"IMAGE": "asImage", "LINE": "asLine", "SHEETS_CHART": "asSheetsChart", "WORD_ART": "asWordArt"};
      const slide = slides[0];
      slide.getPageElements().forEach(e => {
        const type = e.getPageElementType();
        if (type == SlidesApp.PageElementType.SHAPE) {
          const shape = e.asShape();
          shape.removeLink();
          shape.getText().getLinks().forEach(l => l.getTextStyle().removeLink());
        } else if (type == SlidesApp.PageElementType.TABLE) {
          const table = e.asTable();
          const rows = table.getNumRows();
          const cols = table.getNumColumns();
          for (let r = 0; r < rows; r++) {
            for (let c = 0; c < cols; c++) {
              table.getCell(r, c).getText().getLinks().forEach(l => l.getTextStyle().removeLink());
            }
          }
        } else {
          if (type in otherTypes) e[otherTypes[type]]().removeLink();
        }
      });
    }
    
    • 如果您使用 Google 幻灯片的容器绑定脚本,也可以使用 SlidesApp.getActivePresentation().getSlides() 代替 const slides = SlidesApp.openById("###").getSlides()
    • 在此示例脚本中,Google 幻灯片中第一张幻灯片中所有文本和所有对象的所有超链接都将被删除。形状和表格中的文本被删除。

    注意:

    • 请将此脚本用于 V8。
    • 如果要删除 Google 幻灯片中所有幻灯片中的所有超链接,可以使用以下脚本。

      function myFunction() {
        const slides = SlidesApp.openById("###").getSlides();  // Please set the Slides ID.
      
        const otherTypes = {"IMAGE": "asImage", "LINE": "asLine", "SHEETS_CHART": "asSheetsChart", "WORD_ART": "asWordArt"};
        slides.forEach(s => {
          s.getPageElements().forEach(e => {
            const type = e.getPageElementType();
            if (type == SlidesApp.PageElementType.SHAPE) {
              const shape = e.asShape();
              shape.removeLink();
              shape.getText().getLinks().forEach(l => l.getTextStyle().removeLink());
            } else if (type == SlidesApp.PageElementType.TABLE) {
              const table = e.asTable();
              const rows = table.getNumRows();
              const cols = table.getNumColumns();
              for (let r = 0; r < rows; r++) {
                for (let c = 0; c < cols; c++) {
                  table.getCell(r, c).getText().getLinks().forEach(l => l.getTextStyle().removeLink());
                }
              }
            } else {
              if (type in otherTypes) e[otherTypes[type]]().removeLink();
            }
          });
        });
      }
      

    参考资料:

    【讨论】:

    • 感谢您的脚本,就像一个魅力
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    相关资源
    最近更新 更多