如何在 Google 幻灯片上添加具有新布局的新幻灯片?
How to add a new slide with new layout on Google Slides?
以下是我做的:
在 Google 个幻灯片上创建了一个新演示文稿,
编辑了主布局视图中的预定义布局之一
为了有一个我想使用的新布局,
将主布局的名称编辑为“会议”,
编辑了我要使用的预定义布局的名称
“办公室”。
我的问题是在 Google 脚本上我无法引用我想使用的这个特定的预定义布局。
到目前为止,我的代码如下:
function AddSlideToPresentatio() {
// The following line opens my presentation
var presentation = SlidesApp.openById('PresentationID');
//Now, I try to use my new layout
presentation.appendSlide("Office");
}
我完全不知道为什么这不起作用。当我尝试 运行 它时,出现错误:
"Cannot find method appendSlide(string). (line 6, file "Office").
以下是我尝试过的一些组合,它们给我带来了类似的错误:
presentation.appendSlide('Office');
presentation.appendSlide(Office);
presentation.appendSlide("Meeting - Office");
presentation.appendSlide('Meeting - Office');
presentation.appendSlide(Meeting - Office);
如果我只使用 presentation.appendSlide()
它会创建一个新幻灯片,但不是我想要使用的布局。
在Google Apps Script Reference中有三种方法:
- appendSlide(),
- appendSlide(布局),
- appendSlide(预定义布局)
但是,我似乎无法理解最后两者之间的区别,因为当我尝试使用它们时,它们似乎做同样的事情。
您正在为 appendSlide 方法传递布局对象的名称,但您应该传递 LayoutObject
参数。
appendSlide(LayoutObject)
// The following line opens my presentation
var presentation = SlidesApp.openById('PresentationID');
// this will return an array of all the layouts
var layouts = presentation.getLayouts();
//if your first array item is the office layout
var newSlide = presentation.appendSlide(layouts[0]);
//Orelse you can search for your layout
var selectedLayout;
for(var item in layouts)
{
//Logger.log(layouts[item].getLayoutName());
if(layouts[item].getLayoutName() =='CUSTOM_1')
{
selectedLayout = layouts[item];
}
}
var newSlide = presentation.appendSlide(selectedLayout);
PreDefinedLayout
是一个枚举。它包含演示文稿中常见的布局。阅读所有可用的 predefined layouts
按如下方式使用它们;
presentation.appendSlide(SlidesApp.PredefinedLayout.SECTION_TITLE_AND_DESCRIPTION);
这个答案怎么样?请将此视为几个答案之一。
当你想将"Office"和"Meeting"的layout displayname对应到layout对象时,你可以使用以下2种模式。
- 使用幻灯片 ID 追加布局。
- 使用幻灯片对象附加布局。
为了使用这些示例脚本,请在 Advanced Google Services and API console 启用幻灯片 API。
模式 1:使用幻灯片 ID 附加布局
var displayName = "Office"; // Office or Meeting you gave
var presentationId = SlidesApp.getActivePresentation().getId();
var layouts = Slides.Presentations.get(presentationId).layouts;
var layout = {};
for (i in layouts) {
layout[layouts[i].layoutProperties.displayName] = layouts[i].objectId;
}
var resource = {"requests": [{"createSlide": {"slideLayoutReference": {"layoutId": layout[displayName]}}}]};
Slides.Presentations.batchUpdate(resource, presentationId);
模式 2:使用幻灯片对象追加布局
布局有 2 个名称。它们分别是可以在浏览器上看到的 "displayName" 和 getLayoutName()
检索到的 "name"。我以为你的 "Office" 和 "Meeting" 的布局名称可能是 "displayName"。我无法使用 SlidesApp
找到 "displayName"。所以我总是使用幻灯片 API 检索 "displayName",如下所示。
var displayName = "Office"; // Office or Meeting you gave
var s = SlidesApp.getActivePresentation();
var layouts = Slides.Presentations.get(s.getId()).layouts;
var layout = {};
for (i in layouts) {
layout[layouts[i].layoutProperties.displayName] = layouts[i].layoutProperties.name;
}
var layoutObj = s.getLayouts().filter(function(e){return e.getLayoutName() == layout[displayName]})[0];
s.appendSlide(layoutObj);
参考资料:
如果这对您没有用,我很抱歉。
编辑:
以下是我做的:
在 Google 个幻灯片上创建了一个新演示文稿,
编辑了主布局视图中的预定义布局之一 为了有一个我想使用的新布局,
将主布局的名称编辑为“会议”,
编辑了我要使用的预定义布局的名称 “办公室”。
我的问题是在 Google 脚本上我无法引用我想使用的这个特定的预定义布局。
到目前为止,我的代码如下:
function AddSlideToPresentatio() {
// The following line opens my presentation
var presentation = SlidesApp.openById('PresentationID');
//Now, I try to use my new layout
presentation.appendSlide("Office");
}
我完全不知道为什么这不起作用。当我尝试 运行 它时,出现错误:
"Cannot find method appendSlide(string). (line 6, file "Office").
以下是我尝试过的一些组合,它们给我带来了类似的错误:
presentation.appendSlide('Office');
presentation.appendSlide(Office);
presentation.appendSlide("Meeting - Office");
presentation.appendSlide('Meeting - Office');
presentation.appendSlide(Meeting - Office);
如果我只使用 presentation.appendSlide()
它会创建一个新幻灯片,但不是我想要使用的布局。
在Google Apps Script Reference中有三种方法:
- appendSlide(),
- appendSlide(布局),
- appendSlide(预定义布局)
但是,我似乎无法理解最后两者之间的区别,因为当我尝试使用它们时,它们似乎做同样的事情。
您正在为 appendSlide 方法传递布局对象的名称,但您应该传递 LayoutObject
参数。
appendSlide(LayoutObject)
// The following line opens my presentation
var presentation = SlidesApp.openById('PresentationID');
// this will return an array of all the layouts
var layouts = presentation.getLayouts();
//if your first array item is the office layout
var newSlide = presentation.appendSlide(layouts[0]);
//Orelse you can search for your layout
var selectedLayout;
for(var item in layouts)
{
//Logger.log(layouts[item].getLayoutName());
if(layouts[item].getLayoutName() =='CUSTOM_1')
{
selectedLayout = layouts[item];
}
}
var newSlide = presentation.appendSlide(selectedLayout);
PreDefinedLayout
是一个枚举。它包含演示文稿中常见的布局。阅读所有可用的 predefined layouts
按如下方式使用它们;
presentation.appendSlide(SlidesApp.PredefinedLayout.SECTION_TITLE_AND_DESCRIPTION);
这个答案怎么样?请将此视为几个答案之一。
当你想将"Office"和"Meeting"的layout displayname对应到layout对象时,你可以使用以下2种模式。
- 使用幻灯片 ID 追加布局。
- 使用幻灯片对象附加布局。
为了使用这些示例脚本,请在 Advanced Google Services and API console 启用幻灯片 API。
模式 1:使用幻灯片 ID 附加布局
var displayName = "Office"; // Office or Meeting you gave
var presentationId = SlidesApp.getActivePresentation().getId();
var layouts = Slides.Presentations.get(presentationId).layouts;
var layout = {};
for (i in layouts) {
layout[layouts[i].layoutProperties.displayName] = layouts[i].objectId;
}
var resource = {"requests": [{"createSlide": {"slideLayoutReference": {"layoutId": layout[displayName]}}}]};
Slides.Presentations.batchUpdate(resource, presentationId);
模式 2:使用幻灯片对象追加布局
布局有 2 个名称。它们分别是可以在浏览器上看到的 "displayName" 和 getLayoutName()
检索到的 "name"。我以为你的 "Office" 和 "Meeting" 的布局名称可能是 "displayName"。我无法使用 SlidesApp
找到 "displayName"。所以我总是使用幻灯片 API 检索 "displayName",如下所示。
var displayName = "Office"; // Office or Meeting you gave
var s = SlidesApp.getActivePresentation();
var layouts = Slides.Presentations.get(s.getId()).layouts;
var layout = {};
for (i in layouts) {
layout[layouts[i].layoutProperties.displayName] = layouts[i].layoutProperties.name;
}
var layoutObj = s.getLayouts().filter(function(e){return e.getLayoutName() == layout[displayName]})[0];
s.appendSlide(layoutObj);
参考资料:
如果这对您没有用,我很抱歉。