如何使用 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);
}
}
}
}
}
可以使用TextStyle
的setLinkUrl()
方法:
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
我想在文本(单词)中插入一个 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);
}
}
}
}
}
可以使用TextStyle
的setLinkUrl()
方法:
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