问题描述
我正在从Google表格中提取数据,以便根据模板创建新的Google幻灯片。一切正常,但是一旦我用电子表格数据替换了模板变量,我就无法弄清楚如何使文本可作为链接单击。
如何用网站链接替换我的网站变量company_website并使其可点击?
function createSlidesfromSheets() {
var dataSpreadsheetUrl = "https://docs.google.com/spreadsheets/d/xxxxxlink/edit"; //make sure this includes the '/edit at the end
var ss = SpreadsheetApp.openByUrl(dataSpreadsheetUrl);
var deck = SlidesApp.getActivePresentation();
var sheet = ss.getSheetByName('Sheet1'); // this needs to be the name of the sheet/feuille
var values = sheet.getRange('A2:M20').getValues(); //this is the range of data to create the slides from.
//Logger.log(values);
var slides = deck.getSlides();
var templateSlideOne = slides[0];
var templateSlideTwo = slides[1];
var presLength = slides.length;
values.forEach(function(page){
if(page[0]){
var company_name = page[0];
var company_country = page[1];
var company_city = page[2];
var company_website = page[3];
var company_description = page[4];
templateSlideOne.duplicate(); //duplicate the first template slide
templateSlideTwo.duplicate(); //duplicate the second template slide
slides = deck.getSlides(); //update the slides array for indexes and length
newSlideOne = slides[1]; // declare the copy to update of the first template slide (right after the first template's slide)
newSlideTwo = slides[3]; // declare the copy to update of the second template slide (right after the second template's slide)
var firstShapes = (newSlideOne.getShapes());
firstShapes.forEach(function(shape){
shape.getText().replaceAllText('{{company-name}}',company_name);
shape.getText().replaceAllText('{{company-city}}',company_city);
shape.getText().replaceAllText('{{company-country}}',company_country);
shape.getText().replaceAllText('{{company-website}}',company_website);
// how do I use setLinkUrl() to make the new company_website text a clickable link?
});
var secondShapes = (newSlideTwo.getShapes());
secondShapes.forEach(function(shape){
shape.getText().replaceAllText('{{company-name}}',company_name);
shape.getText().replaceAllText('{{company-description}}',company_description);
});
presLength = slides.length;
newSlideOne.move(presLength);
presLength = slides.length;
newSlideTwo.move(presLength);
} // end our conditional statement
}); //close our loop of values
}
解决方法
我相信您的目标如下。
- 您要在脚本中将超链接提供给
shape.getText().replaceAllText('{{company-website}}',company_website)
。
为了实现这一点,如何进行修改?
发件人:
firstShapes.forEach(function(shape){
shape.getText().replaceAllText('{{company-name}}',company_name);
shape.getText().replaceAllText('{{company-city}}',company_city);
shape.getText().replaceAllText('{{company-country}}',company_country);
shape.getText().replaceAllText('{{company-website}}',company_website);
// how do I use setLinkUrl() to make the new company_website text a clickable link?
});
收件人:
firstShapes.forEach(function(shape){
var text = shape.getText();
text.replaceAllText('{{company-name}}',company_name);
text.replaceAllText('{{company-city}}',company_city);
text.replaceAllText('{{company-country}}',company_country);
var n = text.replaceAllText('{{company-website}}',company_website);
if (n > 0) text.getTextStyle().setLinkUrl(company_website);
});
- 在此修改中,从TextRange检索TextStyle,并使用
setLinkUrl
。那时,从replaceAllText
返回的值将用作替换检查。
参考文献:
已添加:第二个问题的答案
关于您的新问题Does setLinkUrl(startOffset,endOffsetInclusive,url) not work in this context?
,我认为幻灯片服务中没有setLinkUrl(startOffset,url)
的方法。我认为这可能是文档服务的方法。 Ref因此不能直接使用。如果您想反映文本部分的链接,请使用
示例脚本:
firstShapes.forEach(function(shape){
var text = shape.getText();
text.replaceAllText('{{company-name}}',company_website);
if (n > 0) text.getRange(startOffset,endOffset).getTextStyle().setLinkUrl(company_website); // Modified
});
- 在这种情况下,请设置
startOffset,endOffset
。