我希望使用Google Drive API创建一个新的 Google 幻灯片,但其中一张幻灯片是从另一个以前的演示文稿中复制的。
我的问题是,是否可以构建一个新的 Google 幻灯片并将幻灯片(单独)插入到新的幻灯片中。
或者是否可以从 Google 演示文稿中删除幻灯片?
我希望使用Google Drive API创建一个新的 Google 幻灯片,但其中一张幻灯片是从另一个以前的演示文稿中复制的。
我的问题是,是否可以构建一个新的 Google 幻灯片并将幻灯片(单独)插入到新的幻灯片中。
或者是否可以从 Google 演示文稿中删除幻灯片?
虽然不完美,但您也许可以使用新的Google Slides API接近。您可以从源演示文稿中读取幻灯片,然后尝试将其复制到目标演示文稿中。目前,API 并不支持所有 Slides 功能,因此过程中可能会丢失一些信息。
(2017 年 2 月)截至 2016 年 11 月,随着 Google Slides API 的发布,OP要求的解决方案的替代方案现在是可能的,尽管不是直接使用 API。该解决方法是您要复制的一张幻灯片位于其自己的独立文件中。然后,您可以使用两个Google API 来实现它:Slides API(用于执行文档级功能,例如添加新幻灯片)以及Google Drive API(用于面向文件的访问,例如复制)。
听起来您正在使用Google APIs Client Library for Ruby,所以您已经设置好了。下一步是在启用 Google Drive 和 Google Slides API的Google Developers Consoleclient_secret*.json
中创建一个项目,然后在创建 OAuth2 凭据后下载该文件。
为了帮助您入门,这里是Drive API 的 Ruby 快速入门示例,这里是Slides API的 Ruby 快速入门。如果您对 Python 没有“过敏”(如果您是,请假装它是伪代码;)),我制作了几个视频,其中包含更多使用 Slides API 的“真实世界”示例,您可以从中学习并迁移到 Ruby如果需要。
下面是另一个 Python 示例,您可以将其移植到 Ruby,它完全按照 OP 的要求执行操作,假设您的模板文件是SLIDE_TEMPLATE_FILE
,DRIVE
是您的 Drive API 服务端点,并且SLIDES
是 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 请求从演示文稿中删除幻灯片,传入您要删除的幻灯片/页面的 ID。如果您无法隔离一张幻灯片,另一种解决方法是:复制整个演示文稿并删除除一张幻灯片之外的所有页面,然后开始添加新幻灯片。希望 API 最终会得到“正确的解决方案”,这样我们就不必玩这些游戏了。
API 无法从 API 执行此完整操作。虽然,我们可以create
新建或copy
现有的 Google 演示文稿。ctrl+c
或者,我们可以通过一张幻灯片和ctrl+v
另一张幻灯片从浏览器交互中做到这一点。