(2017 年 2 月) 自 2016 年 11 月起,使用 release 和 Google Slides API,现在可以替代 OP 要求的解决方案,尽管不是直接使用 API。该解决方法是您要复制的一张幻灯片位于其自己的独立文件中。然后,您可以使用 两个 Google API 来实现这一目标:Slides API(用于执行 文档 级别的功能,例如添加新幻灯片)以及 Google Drive API (用于面向文件的访问,例如复制)。
听起来你正在使用Google APIs Client Library for Ruby,所以你已经设置好了。下一步是在 Google Developers Console 中创建一个启用 Google Drive 和 Google Slides API 的项目,然后在创建 OAuth2 凭据后下载 client_secret*.json 文件。
为了帮助您入门,这里是Ruby quickstart sample for the Drive API,这里是Ruby quickstart for the Slides API。如果您对 Python 没有“过敏”(如果您是,请假装它是伪代码;)),我已经制作了 several videos,其中包含更多“真实世界”的使用 Slides API 的示例,您可以从中学习并迁移到Ruby 如果需要。
下面是另一个 Python 示例,您可以将它移植到 Ruby,它完全按照 OP 的要求执行操作,假设您的模板文件是 SLIDE_TEMPLATE_FILE,DRIVE 是您的 Drive API 服务端点,SLIDES 是幻灯片 API。如果有人给我发了一个 Ruby 端口,我会用它来更新这个答案。
# query for template file with one slide
TMPLFILE = SLIDE_TEMPLATE_FILE
rsp = DRIVE.files().list(q="name='%s'" % TMPLFILE).execute().get('files')[0]
# copy template file
DATA = {'name': 'Google Drive & Slides API template DEMO'}
DECK_ID = DRIVE.files().copy(body=DATA, fileId=rsp['id']).execute().get('id')
# create 2 more (1 title-only & 1 blank) slides in copied file
reqs = [
{'createSlide': {'slideLayoutReference': {'predefinedLayout': 'TITLE_ONLY'}}},
{'createSlide': {'slideLayoutReference': {'predefinedLayout': 'BLANK'}}},
]
SLIDES.presentations().batchUpdate(body={'requests': reqs},
presentationId=DECK_ID).execute()
最后,是的,您还可以使用 deleteObject request 从演示文稿中删除幻灯片,并传入您要删除的幻灯片/页面的 ID。如果您无法隔离一张幻灯片,另一种解决方法是:复制整个演示文稿并删除除一张幻灯片之外的所有页面,然后开始添加新幻灯片。希望 API 最终会得到“正确的解决方案”,这样我们就不必玩这些游戏了。