7

以下是我所做的:

  1. 在 Google 幻灯片上创建了一个新的演示文稿,

  2. 编辑了主布局视图上的预定义布局之一,以获得我想要使用的新布局,

  3. 将主布局的名称编辑为“会议”,

  4. 将我要使用的预定义布局的名称编辑为“Office”。

我的问题是在 Google Script 上我无法引用我想要使用的这个特定的预定义布局。

到目前为止,我的代码如下:

function AddSlideToPresentatio() {

// The following line opens my presentation
var presentation = SlidesApp.openById('PresentationID');

//Now, I try to use my new layout
  presentation.appendSlide("Office");
}

我完全不知道为什么这不起作用。当我尝试运行它时,我收到错误:

“找不到方法 appendSlide(string)。(第 6 行,文件“Office”)。

以下是我尝试过的一些组合,它们给我带来了类似的错误:

presentation.appendSlide('Office');
presentation.appendSlide(Office);
presentation.appendSlide("Meeting - Office");
presentation.appendSlide('Meeting - Office');
presentation.appendSlide(Meeting - Office);

如果我只是使用presentation.appendSlide()它会创建一张新幻灯片,但不会使用我想要使用的布局。

Google Apps 脚本参考中有三种方法:

  1. 附加幻灯片(),
  2. 附加幻灯片(布局),
  3. 附加幻灯片(预定义布局)

但是,我似乎无法理解最后两个之间有什么区别,因为当我尝试使用它们时,它们似乎做同样的事情。

4

2 回答 2

4

您正在为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是一个枚举。它包含演示文稿中常见的布局。阅读所有可用的预定义布局

如下使用它们;

presentation.appendSlide(SlidesApp.PredefinedLayout.SECTION_TITLE_AND_DESCRIPTION);
于 2017-11-20T07:51:52.213 回答
2

这个答案怎么样?请将此视为几个答案之一。

当您想将“办公室”和“会议”的布局显示名称与布局对象对应时,可以使用以下 2 种模式。

  1. 使用幻灯片 ID 附加布局。
  2. 使用幻灯片对象附加布局。

要使用这些示例脚本,请在高级 Google 服务API 控制台中启用 Slides 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”和由 检索的“name” getLayoutName()。我认为您的“办公室”和“会议”的布局名称可能是“显示名称”。我无法使用SlidesApp. 所以我总是使用 Slides 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);

参考 :

如果这对你没有用,我很抱歉。

编辑 :

  • Q1。关于批量更新
    • A1。这用于使用 Slides API 更新幻灯片。您可以在此处查看详细信息。在SlidesApp发布之前,用户已经使用高级 Google 服务使用 Slides API。即使在SlidesApp出版之后,也有一些作品只有这样才能做到。所以我用这个。
  • Q2。关于var layout = {}
    • A2。这用于导入在 for 循环中创建的字典数据。
  • Q3。关于filter()
    • A3。关于这一点,您可以在此处查看文档。您可以在那里看到一些示例脚本。
于 2017-11-20T08:35:01.940 回答