I wish to use Google Drive API for creating a new Google Slides, but with one slide copied from another previous presentation.
My question is, is that possible to build a new Google Slides and insert slides (singularly) into the new one.
Or is it possible to delete the a slide from Google Presentation?
Although imperfect, you may be able to get close using the new Google Slides API. You can read the slide from the source presentation and then attempt to replicate it in the destination presentation. At the moment not all Slides features are supported in the API, so there may be some information loss is the process.
(Feb 2017) As of Nov 2016 with the release of the Google Slides API, an alternative to the solution the OP is asking for is now possible although not directly with the API. That workaround is that the ONE SLIDE you want copied is in its own standalone file. Then you can use two Google APIs to make it happen: the Slides API (to perform the document-level functions like adding new slides) as well as the Google Drive API (for file-oriented access like copying).
Sounds like you're using the Google APIs Client Library for Ruby, so you're set there. The next step is to create a project in the Google Developers Console with both the Google Drive and Google Slides APIs enabled, then download the client_secret*.json
file after you create your OAuth2 credentials.
To help you get started, here's the Ruby quickstart sample for the Drive API, and here's the Ruby quickstart for the Slides API. If you're not "allergic" to Python (if you are, just pretend it's pseudocode ;) ), I've made several videos with more "real-world" examples of using the Slides API you can learn from and migrate to Ruby if desired.
Below is another Python example which you can port to Ruby that does exactly what the OP asked, assuming your template file is SLIDE_TEMPLATE_FILE
, DRIVE
is your Drive API service endpoint, and SLIDES
is the endpoint for the Slides API. If someone PMs me a Ruby port, I'll update this answer with it.
# 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()
Finally, yes, you can also delete slides from presentations with the deleteObject request, passing in the ID of the slide/page you want removed. Another workaround if you can't isolate the ONE SLIDE: copy the entire presentation & delete all pages except the ONE SLIDE, then start adding new slides. Hopefully the API will eventually get "the right solution" so we don't have to play these games.
It is not possible from the API to perform this complete operation from API.
Although, we can create
new or copy
existing Google Presentation.
Or, we can do that from browser interaction by ctrl+c
one slide and ctrl+v
into another one.