Powerpoint export
June 2, 2008 5:17 AM Subscribe
Powerpoint 2007: I have one large presentation of 200 or so slides in one ppt file. Is there a way I can automagically export each slide as its own ppt file.
I'm imaging some manner of macro but the very idea fills me with dread. Does anyone have the mad VB skills they could bring to bear? Failing that, perhaps someone could softly caress my brow and whisper "there, there."
I'm imaging some manner of macro but the very idea fills me with dread. Does anyone have the mad VB skills they could bring to bear? Failing that, perhaps someone could softly caress my brow and whisper "there, there."
If you have access to a SharePoint 2007 server, there is a feature that lets you upload a PPT file to a location where you can see all the slides. Then it let's you pick an arbritrary n slides to combine them into a new presentation. Its not quite what you suggest you want but it is kind of neat.
posted by mmascolino at 7:29 AM on June 2, 2008
posted by mmascolino at 7:29 AM on June 2, 2008
You probably already know that one can save each the presentation as a series of images or HTML. This might help if you are in a pinch. Obviously, you loose the links when exporting as images, and HTML does render quite the same way.
Please post back here if you find a solution.
posted by dantodd at 2:45 PM on June 2, 2008
Please post back here if you find a solution.
posted by dantodd at 2:45 PM on June 2, 2008
Best answer: Here you go, it's crude but it will work. Go to the directory where your powerpoint presentation is, then make a subdirectory called tempslides. So if your powerpoint was in c:\Documents and Settings\yourName\My Documents\Powerpoints, you'll make the directory c:\Documents and Settings\yourName\My Documents\Powerpoints\tempslides
Then, open your powerpoint presentation. Use the Tools/Macro/Visual Basic Editor. Then, insert new module (do this literally, use the Insert menu item, then choose Module.) Copy/paste what I have below.
Sub ShowNamesofSlides()
Dim objPres As Presentation
Set objPres = ActivePresentation
With objPres
For i = 1 To .Slides.Count
fname = .Slides(i).Name
.Slides(i).Export CurDir + "\tempslides\" + fname + ".ppt", "ppt"
Next
End With
End Sub
This code will go through each slide and export one at a time to the slide name with a ppt extension. You'll just get generic names such as "slide40" and so on. To run it, click anywhere in the code and press the F5 key.
posted by GrayAngora at 6:53 PM on June 2, 2008
Then, open your powerpoint presentation. Use the Tools/Macro/Visual Basic Editor. Then, insert new module (do this literally, use the Insert menu item, then choose Module.) Copy/paste what I have below.
Sub ShowNamesofSlides()
Dim objPres As Presentation
Set objPres = ActivePresentation
With objPres
For i = 1 To .Slides.Count
fname = .Slides(i).Name
.Slides(i).Export CurDir + "\tempslides\" + fname + ".ppt", "ppt"
Next
End With
End Sub
This code will go through each slide and export one at a time to the slide name with a ppt extension. You'll just get generic names such as "slide40" and so on. To run it, click anywhere in the code and press the F5 key.
posted by GrayAngora at 6:53 PM on June 2, 2008
Response by poster: All good answers everyone. Thanks! GrayAngora *just* pips it by having some actual VB which I can use to baffle and befuddle those who said it couldn't be done. (Maybe I should have mentioned that was a sub-request.)
posted by Jofus at 11:56 PM on June 2, 2008
posted by Jofus at 11:56 PM on June 2, 2008
Response by poster: And, hey, we've been fiddling with the above and have come up with the following little tweak that names the output after the slide's position:
Sub ShowNamesofSlides()
Dim objPres As Presentation
Set objPres = ActivePresentation
With objPres
For i = 1 To .Slides.Count
fname = CStr(i)
.Slides(i).Export CurDir + "\tempslides\" + fname + ".ppt", "ppt"
Next
End With
End Sub
(Is there a karmic penalty for answering your own question? I do hope not.)
posted by Jofus at 2:56 AM on June 3, 2008
Sub ShowNamesofSlides()
Dim objPres As Presentation
Set objPres = ActivePresentation
With objPres
For i = 1 To .Slides.Count
fname = CStr(i)
.Slides(i).Export CurDir + "\tempslides\" + fname + ".ppt", "ppt"
Next
End With
End Sub
(Is there a karmic penalty for answering your own question? I do hope not.)
posted by Jofus at 2:56 AM on June 3, 2008
That's great! I actually was going to change the name of the subroutine to something more descriptive (sub ExportEachSlidetoFile?) but couldn't edit the code after posting. Originally, I meant to print out the names of the slides just so I could see that this was working, then do something like you did. I also meant to dereference the objPres at the end. I've been working with VBA for years, but this was my first experience with Powerpoint. You can also export as JPG image if you ever need to just by changing the second argument "ppt" to "jpg".
Glad you prevailed over the naysayers, you can do a lot of things using code that would otherwise be impossible.
posted by GrayAngora at 11:16 AM on June 3, 2008
Glad you prevailed over the naysayers, you can do a lot of things using code that would otherwise be impossible.
posted by GrayAngora at 11:16 AM on June 3, 2008
This thread is closed to new comments.
This post ("Impress: Export slides into separate documents") at the OpenOffice.org forum sounds useful, but I don't know if it will work with ppt. I had a quick go but couldn't make it work in 5 minutes. (This post explains how to add the macro to OpenOffice.)
So:
(a) can you install OpenOffice to do this?
(b) assuming that the macro works as described, will it work with ppt (vs Oo's Impress format)?
(c) if you can get ppt -> multiple Impress files, is that any use to you (eg. will PowerPoint open the Impress files?)?
posted by manyon at 6:46 AM on June 2, 2008