问题描述
这是我第一个几乎成功的插件。它是一个独立的脚本。我已经在其他人创建的几个幻灯片上对其进行了测试。在最新的测试中,我的代码创建的目录使用了甲板上的母版/布局,而不是我在代码中调用的 BLANK 预定义的?
/**
not using blank predefined blank master
MINI TEST
*/
function minitest() {
const pres = SlidesApp.getActivePresentation();
const presId = pres.getId();
let updtReqArr = [];
// create request for a Slide to hold the table of contents
let insertIdx = 0;
pageId = miniPage(updtReqArr,insertIdx);
if (updtReqArr.length > 0) {
response = Slides.Presentations.batchUpdate({ 'requests': updtReqArr },presId);
}
}
/**
* create request for a Slide to hold the table of contents
*/
function miniPage(updtReqArr,insertIdx) {
// console.log('Begin createtocPage - insertIdx: ',insertIdx );
pageId = Utilities.getUuid();
// console.log('pageId: ',pageId);
// base slide object request
slideObj = [{
'createSlide': {
'objectId': pageId,'insertionIndex': insertIdx,'slideLayoutReference': {
'predefinedLayout': 'BLANK' // name of master
}
}
}];
// console.log('slideObj: ',JSON.stringify(slideObj));
updtReqArr.push(slideObj);
// console.log('updtReqArr.length: ',updtReqArr.length);
// code that creates page elments,background,etc. removed for simplicity
return pageId;
}
我遇到此问题的演示文稿是 GEG Eduprotocols 演示文稿的副本。这是我的副本的链接。 https://docs.google.com/presentation/d/1EEUDz0fBXnI4IBT8xlcKJrfPs_KMr5HIY2YfCjDLiuQ/edit?usp=sharing 这是公开的来源 https://docs.google.com/presentation/d/1i5Hhod8ERu8dfmMk5f-pcuFGHZ6bc96JAe3Pca_rbxY/edit#slide=id.p
创作者使用 Slidesmania 母版,这些母版出现在我添加的目录中,尽管我说使用空白。我做错了什么?
let layoutsArr = pres.getLayouts();
let lArrSize = layoutsArr.length;
for ( i = 0 ; i < lArrSize ; i++ ) {
console.log('layoutsArr[i].getLayoutName(): ',layoutsArr[i].getLayoutName() );
if ( layoutsArr[i].getLayoutName() === 'BLANK' ) {
blankObjId = layoutsArr[i].getobjectId();
blankIdx = i;
console.log('layoutsArr[i] blankIdx: ',blankIdx );
i = presSize + 1;
}
}
let mastersArr = pres.getMasters();
let mArrSize = mastersArr.length;
for ( i = 0 ; i < mArrSize ; i++ ) {
console.log('i: ',i );
layoutsArr = mastersArr[i].getLayouts();
let lArrSize = layoutsArr.length;
for ( j = 0 ; j < lArrSize ; j++ ) {
console.log('j: ',j,' layoutsArr[j].getLayoutName(): ',layoutsArr[j].getLayoutName() );
if ( layoutsArr[j].getLayoutName() === 'BLANK' ) {
blankObjId = layoutsArr[j].getobjectId();
console.log(' blankObjId: ',blankObjId );
blankIdx = j;
console.log('layoutsArr[i] blankIdx: ',blankIdx );
j = lArrSize + 1;
i = mArrSize + 1;
}
}
}
pageId = Utilities.getUuid();
console.log('pageId: ',pageId);
slideObj = [{
'createSlide': {
'objectId': pageId,'slideLayoutReference': {
"layoutId": blankObjId
}
}
}];
slideObj: [{"createSlide":{"objectId":"c5f67b57-3318-4e4a-9aff-7d1a09f57464","insertionIndex":0,"slideLayoutReference":{"layoutId":"p12"}}}]
error
// Invalid requests[0].createSlide: The layout (p12) is not present in the current master (gc92c1a471f_0_19804).
解决方法
说明:
由于您的幻灯片具有自定义模板,因此新模板已覆盖预定义的布局。您需要从 slide-mania
母版的特定布局中指定对象 ID。
示例代码:
/**
not using blank predefined blank master
MINI TEST
*/
function miniTest() {
const pres = SlidesApp.getActivePresentation();
const presId = pres.getId();
const master = pres.getMasters()[1]; // slide-mania
const layout = master.getLayouts()[16].getObjectId(); // blank
let updtReqArr = [];
// create request for a Slide to hold the table of contents
let insertIdx = 0;
pageId = miniPage(updtReqArr,insertIdx,layout); // blank
if (updtReqArr.length > 0) {
response = Slides.Presentations.batchUpdate({ 'requests': updtReqArr },presId);
}
}
/**
* create request for a Slide to hold the table of contents
*/
function miniPage(updtReqArr,layout) {
// console.log('Begin createTocPage - insertIdx: ',insertIdx );
pageId = Utilities.getUuid();
// console.log('pageId: ',pageId);
// base slide object request
slideObj = [{
'createSlide': {
'objectId': pageId,'insertionIndex': insertIdx,'slideLayoutReference': {
'layoutId': layout // object ID of layout
}
}
}];
// console.log('slideObj: ',JSON.stringify(slideObj));
updtReqArr.push(slideObj);
// console.log('updtReqArr.length: ',updtReqArr.length);
// code that creates page elments,background,etc. removed for simplicity
return pageId;
}
要更改创建的布局,请根据 Slide Mania 母版中的布局顺序更改 master.getLayouts()
的索引。您可以使用 View
菜单 -> Master
查看它们。
参考文献: