如何使用 Google slide API(google 应用程序脚本)将超链接插入到文本中

How can i insert hyperlink into a text with Google slide API (google app script)

我想在文本(单词)中插入一个 link,但我找不到实现该技巧的方法。官方文档中没有函数 https://developers.google.cn/apps-script/reference/slides/page-element .

我试过这样的事情:

var pageElement = SlidesApp.openById('12hh9vWVhFdj9kH51U-07Rc5yc9gKitJ3f_sr1I38lQQYUDB').getSlides()[0]; pageElement.replaceAllText("Bonjour", "Aurevoir" + **link associated**);

第二行是我找不到方法的地方。

如何在被替换的文本中插入一个hyperlink?

谢谢

要设置/更新 link 您需要使用 Advanced Slides Service based on the Slides API

  • enabling the advanced service you can use the Slie API method presentations.batchUpdate 之后请求 updateTextStyle
  • 这允许您指定一个 hyperlink,其中感兴趣的文本所在的形状的 id,它的开始和结束索引是您必须提前检索的必需参数
  • 因此,您需要分别执行两个不同的请求 - 更改文本本身,然后更改 hyperlink
  • 重要的是使用saveAndClose()来确保两个请求不会及时重叠
  • 为了使后者按预期工作,您的脚本应该是独立的,而不是绑定到打开的幻灯片文档

示例代码:

function myFunction() {  
  var presentationId = "XXXX";
  var newText = "Aurevoir";
  var oldText = "Bonjour";
  var presentation = SlidesApp.openById(presentationId);
  var pageElement = presentation.getSlides()[0]; 
  pageElement.replaceAllText(oldText, newText);
  presentation.saveAndClose();
  var newLink = "www.whosebug.com";
  var pageElement = SlidesApp.openById(presentationId).getSlides()[0]; 
   
  var elements = pageElement.getPageElements();
  var requests =[];
  for( var i = 0; i < elements.length; i++){
    var element = elements[i];
    if(element.getPageElementType() == "SHAPE"){
      var text = element.asShape().getText().find(newText);
      if(text.length > 0){
        var objectId = element.getObjectId();
        for (var j =0; j < text.length; j++){
          var start = text[j].getStartIndex();
          var end = text[j].getEndIndex();
          requests.push(
            {
              updateTextStyle: {
                objectId: objectId,
                textRange: {
                  startIndex: start,
                  endIndex: end,
                  type: "FIXED_RANGE"
                },
                fields: 'link',
                style: {
                  link: {
                    url: newLink
                  }
                }
              }
            }
          );
          Slides.Presentations.batchUpdate({'requests': requests}, presentationId);
        }
      } 
    }
  }
}

可以使用TextStylesetLinkUrl()方法:

https://developers.google.com/apps-script/reference/slides/text-style#setLinkUrl(String)

您可以从 TextRange 获得 TextStyle

https://developers.google.com/apps-script/reference/slides/text-range#gettextstyle

例如,要添加一张新幻灯片并将其标题设为 link:

var presentation = SlidesApp.getActivePresentation();
var slide = presentation.appendSlide(SlidesApp.PredefinedLayout.TITLE_AND_BODY);
var title = slide.getPlaceholder(SlidesApp.PlaceholderType.TITLE);
var titleText = title.asShape().getText();
titleText.appendText("Link");
titleText.getTextStyle().setLinkUrl("http://test.org");

您还可以在 TextRange 上调用 getRange(),然后在其上调用 getTextStyle() 如果您想将 link 应用于文本中的子跨度。

https://developers.google.com/apps-script/reference/slides/text-range#getrangestartoffset,-endoffset