总体来说,我对谷歌应用套件的脚本和编码是陌生的,不完全确定如何做到这一点。我想创建代码,允许我使用Google Sheets文档中的相关行,基于幻灯片模板创建一组新的Google幻灯片。
function generateNewSlides() {
var wsID = "would insert worksheet URL ID here";
var ws = SpreadsheetApp.openById(wsID).getSheetByName("Data");
var data = ws.getRange(2, 1, ws.getLastRow()-1, 5).getValues();
>the above should get the relevant table from the sheet
data.forEach(function(info){
if(info[0]){
var firstname = info[0];
var surname = info[1];
var email = info[2];
var phone = info[3];
var image = info[4];
var presName = info[5];
>the above are columns where the different pieces of data would be taken from for the placeholders in the Slides template
var slidesTemplateID = "would insert slides template URL ID here";
var slidesTemplate = SlidesApp.openById(slidesTemplateID);
var template = slidesTemplate.getSlides();
var folderID = "would insert desired folder ID for saving in here";
>the above should get me the Slides template
template.makeCopy(presName,DriveApp.getFolderById(folderID)); **>line where error occurred**
var newPresentation = DriveApp.getFilesByName(presName).next().getUrl();
var Presentation = SlidesApp.openByUrl(newPresentation);
>the above should create a copy and then open it
var shapes = (Presentation.getShapes());
shapes.forEach(function(shape){
shape.getText().replaceAllText('{{firstname}}',firstname);
shape.getText().replaceAllText('{{surname}}',surname);
shape.getText().replaceAllText('{{email}}',email);
shape.getText().replaceAllText('{{phone}}',phone);
shape.getText().replaceAllText('{{presname}}', presName)
});
>the above should replace all the placeholder tags in the template with the row data
}
});
}
以上是我目前掌握的代码。我正在从中提取数据的工作表有几列:名字、姓氏、电子邮件地址、电话号码、图像(URL)和演示名称。当我试图运行它时,我在第37行遇到一个错误,它说template.makeCopy不是一个函数,但是我确定。makeCopy应该可以为它创建一个副本吧?
我的主要问题是:1)我应该做些什么来使它工作,为工作表中的每一行生成一个新的幻灯片集?2)我如何向它添加图像来替换我在模板的正方形(不是文本框)中添加的占位符标签?
提前感谢!
makeCopy(name,destination)是类文件的一个方法,它属于Drive服务,而不属于Slides服务。在您的代码中,< code>template是一个幻灯片列表(您可以通过从演示文稿中调用getSlides()方法来检索它)。< code>makeCopy在这里无法工作。
为了制作< code >演示文稿的副本,您应该使用< code >驱动服务。您应该替换这些行:
var slidesTemplate = SlidesApp.openById(slidesTemplateID);
var template = slidesTemplate.getSlides();
有了这个:
var template = DriveApp.getFileById(slidesTemplateID);
接下来,您要循环访问演示文稿
中的所有形状,并将所有占位符标签替换为所需的文本。为了做到这一点,你正在使用Presentation.getShapes(),它不能工作,因为getShapes(
)不是Presentation
的方法,而是Slide的方法。
应首先循环访问演示文稿
中的所有幻灯片,然后对于每张幻灯片
,循环访问所有形状。您应该替换以下行:
var shapes = (Presentation.getShapes());
shapes.forEach(function(shape){
// Replacing text lines
});
有了这些:
Presentation.getSlides().forEach(function(slide) {
slide.getShapes().forEach(function(shape) {
// Replacing text lines
})
});
为了检索复制的演示文稿,您当前正在执行以下操作:
template.makeCopy(presName,DriveApp.getFolderById(folderID));
var newPresentation = DriveApp.getFilesByName(presName).next().getUrl();
var Presentation = SlidesApp.openByUrl(newPresentation);
无需这样做,只需检索创建模板的ID
,按ID
打开即可,如下所示:
var copiedTemplate = template.makeCopy(presName,DriveApp.getFolderById(folderID));
var Presentation = SlidesApp.openById(copiedTemplate.getId());