使用 Google Apps 脚本从 Master Slide Desk 复制多张幻灯片
Copying Multiple Slides from a Master Slide Desk using Google Apps Script
我创建了一个代码来替换 google 幻灯片上的占位符。这个项目的起点是一个 google 表格。提交 google 表单后 - google 表单中的相关数据将输入到 google 幻灯片模板中。请参阅下面的代码。我想在表单上创建一个问题,人们将能够 select 包含多张幻灯片(例如 2 张证书幻灯片,共 10 张)
function PoD() {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("A-PoD").activate();
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow()
for (var i =2;i<lr;i++){
if(ss.getRange(i, 1).getValue()){
//Make a copy of the template file
var documentId = DriveApp.getFileById('1REHMrl6kfzXbgSipvBDkNitkfsM8tJsUSAICggxNsHw').makeCopy().getId();
var Name_of_programme = ss.getRange(i, 2).getValue();
DriveApp.getFileById(documentId).setName("PwC's Academy_"+Name_of_client+"_"+Name_of_programme+"_"+Month);
var FileName = Name_of_programme;
//Get the document body as a variable
var body = SlidesApp.openById(documentId);
body.replaceAllText('{Name of programme}', Name_of_programme);
var lastSlide = body.getSlides();
lastSlide[5].remove();
我希望继续编写脚本以包含 select 多张幻灯片的功能。我看到下面的脚本可以复制一张幻灯片,但无法弄清楚如何轻松复制多张幻灯片。
var srcPresentationId = "### source fileId ###";
var copysrcSlideIndex = 0; // 0 means page 1.
var copydstSlideIndex = 0; // 0 means page 1.
var src = SlidesApp.openById(srcPresentationId).getSlides()[copysrcSlideIndex];
SlidesApp.getActivePresentation().insertSlide(copydstSlideIndex, src);
我想让人们选择 select 哪些幻灯片作为多项选择包含在 google 表格中。
在脚本的后端,我是否需要将幻灯片的名称与幻灯片编号对应起来?或者可以在每张幻灯片的文本框中包含唯一参考,然后 select 相关幻灯片?在这里大声思考。任何指导将不胜感激。
- 您想将母版 Google 幻灯片中的第 5、7 和 9 页(索引为 4、6 和 8)复制到其他 Google 幻灯片。
- 您想使用 Google Apps 脚本实现此目的。
我能像上面那样理解。如果我的理解是正确的,那么这个答案呢?请将此视为几个可能的答案之一。
流量:
- 从母版 Google 幻灯片中检索所有幻灯片。
- 将所需的幻灯片复制到目标位置Google循环中的幻灯片。
模式 1:
示例脚本:
在你运行脚本之前,请设置变量。
function myFunction() {
var copyPageNumbers = [5, 7, 9]; // Please set the page number. This is not the index. So the 1st page is 1.
var masterGoogleSlidesId = "###"; // Please set the master Google Slides ID.
var destinationGoogleSlidesId = "###"; // Please set the destination Google Slides ID.
var offset = 1;
var src = SlidesApp.openById(masterGoogleSlidesId);
var dst = SlidesApp.openById(destinationGoogleSlidesId);
var slides = src.getSlides();
var page = 0;
slides.forEach(function(slide, i) {
if (copyPageNumbers.indexOf(i + 1) != -1) {
dst.insertSlide(offset + page, slide);
page++;
}
});
}
模式二:
示例脚本:
function myFunction() {
var copyPageNumbers = [5, 7, 9]; // Please set the page number. This is not the index. So the 1st page is 1.
var masterGoogleSlidesId = "###"; // Please set the master Google Slides ID.
var destinationGoogleSlidesId = "###"; // Please set the destination Google Slides ID.
var offset = 1;
var src = SlidesApp.openById(masterGoogleSlidesId);
var dst = SlidesApp.openById(destinationGoogleSlidesId);
var slides = src.getSlides();
copyPageNumbers.forEach(function(p, i) {
dst.insertSlide(offset + i, slides[p - 1]);
});
}
注:
- 在这两种模式中,母版 Google 幻灯片的第 5、7 和 9 页是从目标 Google 幻灯片的第 2 页复制而来的。
- 当使用
var offset = 0
时,母版 Google 幻灯片的第 5、7 和 9 页从目标 Google 幻灯片的第 1 页复制。
参考:
谢谢@Tanaike 的解决方案!
以您的代码为基础,我能够构建一个脚本来将幻灯片添加到单个文件夹中的多个幻灯片组。我想分享给可能需要的人。下面的代码...
function copySlides() {
// Array of slide numbers to grab [1, 2, 3,...]
var copyPageNumbers = [1]; // Please set the page number. This is not the index. So the 1st page is 1.
// Which deck contains the slides to copy
var masterGoogleSlidesId = '###'; // Please set the master Google Slides ID.
// Folder containing Slides to copy to
var folderID = '###';
var folderToCopyTo = DriveApp.getFolderById(folderID);
// Slide files in folder
var slidesInFolder = folderToCopyTo.getFilesByType(MimeType.GOOGLE_SLIDES);
var counter = 0;
var total = 0;
while (slidesInFolder.hasNext()) {
var file = slidesInFolder.next();
var destinationGoogleSlidesId = file.getId(); // Please set the destination Google Slides ID.
var offset = 0;
try {
var src = SlidesApp.openById(masterGoogleSlidesId);
var dst = SlidesApp.openById(destinationGoogleSlidesId);
var slides = src.getSlides();
copyPageNumbers.forEach(function (p, i) {
dst.insertSlide(offset + i, slides[p - 1]);
});
counter++;
}
catch (e) {
console.log(destinationGoogleSlidesId);
console.log(e);
}
total++;
}
console.log(counter + ' of ' + total + ' Slide Decks Updated');
}
我创建了一个代码来替换 google 幻灯片上的占位符。这个项目的起点是一个 google 表格。提交 google 表单后 - google 表单中的相关数据将输入到 google 幻灯片模板中。请参阅下面的代码。我想在表单上创建一个问题,人们将能够 select 包含多张幻灯片(例如 2 张证书幻灯片,共 10 张)
function PoD() {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("A-PoD").activate();
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow()
for (var i =2;i<lr;i++){
if(ss.getRange(i, 1).getValue()){
//Make a copy of the template file
var documentId = DriveApp.getFileById('1REHMrl6kfzXbgSipvBDkNitkfsM8tJsUSAICggxNsHw').makeCopy().getId();
var Name_of_programme = ss.getRange(i, 2).getValue();
DriveApp.getFileById(documentId).setName("PwC's Academy_"+Name_of_client+"_"+Name_of_programme+"_"+Month);
var FileName = Name_of_programme;
//Get the document body as a variable
var body = SlidesApp.openById(documentId);
body.replaceAllText('{Name of programme}', Name_of_programme);
var lastSlide = body.getSlides();
lastSlide[5].remove();
我希望继续编写脚本以包含 select 多张幻灯片的功能。我看到下面的脚本可以复制一张幻灯片,但无法弄清楚如何轻松复制多张幻灯片。
var srcPresentationId = "### source fileId ###";
var copysrcSlideIndex = 0; // 0 means page 1.
var copydstSlideIndex = 0; // 0 means page 1.
var src = SlidesApp.openById(srcPresentationId).getSlides()[copysrcSlideIndex];
SlidesApp.getActivePresentation().insertSlide(copydstSlideIndex, src);
我想让人们选择 select 哪些幻灯片作为多项选择包含在 google 表格中。
在脚本的后端,我是否需要将幻灯片的名称与幻灯片编号对应起来?或者可以在每张幻灯片的文本框中包含唯一参考,然后 select 相关幻灯片?在这里大声思考。任何指导将不胜感激。
- 您想将母版 Google 幻灯片中的第 5、7 和 9 页(索引为 4、6 和 8)复制到其他 Google 幻灯片。
- 您想使用 Google Apps 脚本实现此目的。
我能像上面那样理解。如果我的理解是正确的,那么这个答案呢?请将此视为几个可能的答案之一。
流量:
- 从母版 Google 幻灯片中检索所有幻灯片。
- 将所需的幻灯片复制到目标位置Google循环中的幻灯片。
模式 1:
示例脚本:
在你运行脚本之前,请设置变量。
function myFunction() {
var copyPageNumbers = [5, 7, 9]; // Please set the page number. This is not the index. So the 1st page is 1.
var masterGoogleSlidesId = "###"; // Please set the master Google Slides ID.
var destinationGoogleSlidesId = "###"; // Please set the destination Google Slides ID.
var offset = 1;
var src = SlidesApp.openById(masterGoogleSlidesId);
var dst = SlidesApp.openById(destinationGoogleSlidesId);
var slides = src.getSlides();
var page = 0;
slides.forEach(function(slide, i) {
if (copyPageNumbers.indexOf(i + 1) != -1) {
dst.insertSlide(offset + page, slide);
page++;
}
});
}
模式二:
示例脚本:
function myFunction() {
var copyPageNumbers = [5, 7, 9]; // Please set the page number. This is not the index. So the 1st page is 1.
var masterGoogleSlidesId = "###"; // Please set the master Google Slides ID.
var destinationGoogleSlidesId = "###"; // Please set the destination Google Slides ID.
var offset = 1;
var src = SlidesApp.openById(masterGoogleSlidesId);
var dst = SlidesApp.openById(destinationGoogleSlidesId);
var slides = src.getSlides();
copyPageNumbers.forEach(function(p, i) {
dst.insertSlide(offset + i, slides[p - 1]);
});
}
注:
- 在这两种模式中,母版 Google 幻灯片的第 5、7 和 9 页是从目标 Google 幻灯片的第 2 页复制而来的。
- 当使用
var offset = 0
时,母版 Google 幻灯片的第 5、7 和 9 页从目标 Google 幻灯片的第 1 页复制。
- 当使用
参考:
谢谢@Tanaike 的解决方案!
以您的代码为基础,我能够构建一个脚本来将幻灯片添加到单个文件夹中的多个幻灯片组。我想分享给可能需要的人。下面的代码...
function copySlides() {
// Array of slide numbers to grab [1, 2, 3,...]
var copyPageNumbers = [1]; // Please set the page number. This is not the index. So the 1st page is 1.
// Which deck contains the slides to copy
var masterGoogleSlidesId = '###'; // Please set the master Google Slides ID.
// Folder containing Slides to copy to
var folderID = '###';
var folderToCopyTo = DriveApp.getFolderById(folderID);
// Slide files in folder
var slidesInFolder = folderToCopyTo.getFilesByType(MimeType.GOOGLE_SLIDES);
var counter = 0;
var total = 0;
while (slidesInFolder.hasNext()) {
var file = slidesInFolder.next();
var destinationGoogleSlidesId = file.getId(); // Please set the destination Google Slides ID.
var offset = 0;
try {
var src = SlidesApp.openById(masterGoogleSlidesId);
var dst = SlidesApp.openById(destinationGoogleSlidesId);
var slides = src.getSlides();
copyPageNumbers.forEach(function (p, i) {
dst.insertSlide(offset + i, slides[p - 1]);
});
counter++;
}
catch (e) {
console.log(destinationGoogleSlidesId);
console.log(e);
}
total++;
}
console.log(counter + ' of ' + total + ' Slide Decks Updated');
}