View Full Version : PowerPoint Object Export. Please Help!
twz2004
04-12-2018, 10:28 PM
Hey all,
So far, i've gathered the following working code via the forums to export x3 objects I select on a slide in PowerPoint:
Sub test()
Dim i As Integer
Dim fn As String
For i = 1 To 3
fn = "fn-" & i & ".png"
Call ActiveWindow.Selection.ShapeRange(i).Export("e:\dropbox\" & fn, ppShapeFormatPNG)
Next i
End Sub
My end-goal for the code here is:
cycle through each slide (there is 30 slides)
select-all objects on the each slide
export each object as a separate PNG file
Currently, with the code above, I have to manually select the objects I want exported and run the script. I need these objects exported so I can import them into OmniGraffle (VISIO for Mac).
22016
Any help would be awesome! Thanks so much!
John Wilson
04-13-2018, 12:47 AM
This (top of head code) should get you close
Sub exOBJ()
Dim oshp As Shape
Dim osld As Slide
Dim fn As String
Dim i As Long
For Each osld In ActiveWindow.Selection.SlideRange
For Each oshp In osld.Shapes
i = i + 1
fn = CStr(i) &"_"
Call oshp.Export("e:\dropbox\" & fn, ppShapeFormatPNG)
Next
Next
End Sub
twz2004
04-13-2018, 12:55 AM
Thank you! I'll give that a shot. Any idea how to make the code work on a Mac? I changed the path '/User/username/Download' and it wont create any files.
twz2004
04-13-2018, 01:40 AM
Thanks again for your help!
The below code is working great under Windows. Aside from BOLD sections. I was trying to add a condition where it skipped text and only exports objects.
Sub exOBJ()
Dim oshp As shape
Dim osld As Slide
Dim fn As String
Dim i As Long
Dim slidenum As Integer
For slidenum = 1 To 3
ActiveWindow.View.GotoSlide (slidenum)
On Error Resume Next
MkDir "E:\Dropbox\projects\construct\Extract\Slide-" & slidenum
For Each osld In ActiveWindow.Selection.SlideRange
For Each oshp In osld.Shapes
i = i + 1
If oshp.TextFrame.TextRange.Paragraphs > 1 Then GoTo q
fn = "Slide-" & slidenum & "\" & CStr(i) & "_.png"
Call oshp.Export("E:\Dropbox\projects\construct\Extract\" & fn, ppShapeFormatPNG)
q:
Next oshp
Next osld
Next slidenum
End Sub
John Wilson
04-13-2018, 04:48 AM
Maybe
For Each oshp In osld.Shapes
If Not oshp.HasTextFrame Then
i = i + 1
fn = "Slide-" & slidenum & "\" & CStr(i) & "_.png"
Call oshp.Export("E:\Dropbox\projects\construct\Extract\" & fn, ppShapeFormatPNG)
End If
Next oshp
twz2004
04-13-2018, 03:44 PM
Maybe
For Each oshp In osld.Shapes
If Not oshp.HasTextFrame Then
i = i + 1
fn = "Slide-" & slidenum & "\" & CStr(i) & "_.png"
Call oshp.Export("E:\Dropbox\projects\construct\Extract\" & fn, ppShapeFormatPNG)
End If
Next oshp
Thanks, John! So I discovered this code that works well for extracting text from slides. I would like to see about incorporating my previous code so it uses the same parsing method to extract objects.
Sub ExportText()
Dim oPres As Presentation
Dim oSlides As Slides
Dim osld As Slide 'Slide Object
Dim oshp As Shape 'Shape Object
Dim iFile As Integer 'File handle for output
iFile = FreeFile 'Get a free file number
Dim PathSep As String
Dim FileNum As Integer
#If Mac Then
PathSep = ":"
#Else
PathSep = "\"
#End If
Set oPres = ActivePresentation
Set oSlides = oPres.Slides
FileNum = FreeFile
'Open output file
' NOTE: errors here if file hasn't been saved
Open oPres.Path & PathSep & "AllText.TXT" For Output As FileNum
For Each osld In oSlides 'Loop thru each slide
Print #iFile, ""
Print #iFile, "Slide Number-" & osld.SlideNumber
Print #iFile, ""
For Each oshp In osld.Shapes 'Loop thru each shape on slide
'Check to see if shape has a text frame and text
If oshp.HasTextFrame And oshp.TextFrame.HasText Then
If oshp.Type = msoPlaceholder Then
Select Case oshp.PlaceholderFormat.Type
Case Is = ppPlaceholderTitle, ppPlaceholderCenterTitle
Print #iFile, "Title:" & vbTab & oshp.TextFrame.TextRange
Case Is = ppPlaceholderBody
Print #iFile, "Body:" & vbTab & oshp.TextFrame.TextRange
Case Is = ppPlaceholderSubtitle
Print #iFile, "SubTitle:" & vbTab & oshp.TextFrame.TextRange
Case Else
Print #iFile, "Other Placeholder:" & vbTab & oshp.TextFrame.TextRange
End Select
Else
Print #iFile, vbTab & oshp.TextFrame.TextRange
End If ' msoPlaceholder
End If ' Has text frame/Has text
Next oshp
Next osld
'Close output file
Close #iFile
End Sub
twz2004
04-16-2018, 02:03 PM
Not sure how to delete a post, I don't see the option, I was going to do some cleanup on this thread. I've made good progress on the script. However, the only thing that seems to be working on the Mac platform is the Text export. Images are not exporting like they are on the PC. When I run this final code on a PC everything seems to work great.
Option Explicit
Public core_path, pathsep As String
Public Sub Core_Module()
core_path = GetSetting("FPPT", "Export", "Default Path")
#If Mac Then
'sFile = sSubID & "-" & sSubSession & "-synced.txt"
On Error Resume Next
pathsep = ":"
core_path = MacScript("return (path to desktop folder) as String")
core_path = MacScript("(choose folder with prompt ""Select the folder""" & _
"default location alias """ & core_path & """) as string")
#Else
On Error Resume Next
pathsep = "\"
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = core_path
.AllowMultiSelect = False
.Title = "Select destination folder"
.Show
If .SelectedItems.Count = 1 Then
core_path = .SelectedItems(1)
Else
MsgBox "Nothing was saved"
End If
End With
core_path = core_path + pathsep
#End If
If core_path <> "" Then
'Open path For Output As #n
SaveSetting "FPPT", "Export", "Default Path", core_path
End If
'TextFormatChange
ExportText
ObjectsExport
ExportSpeakerNotes
MsgBox ("Done")
End Sub
Sub TextFormatChange()
Dim osld As Slide, oshp As Shape
For Each osld In ActivePresentation.Slides
For Each oshp In osld.Shapes
If oshp.Type = msoPlaceholder Then
'Title text change values as required
If oshp.PlaceholderFormat.Type = 1 Or oshp.PlaceholderFormat.Type = 3 Then
If oshp.HasTextFrame Then
If oshp.TextFrame.HasText Then
With oshp.TextFrame.TextRange.Font
.Name = "Times New Roman"
.Size = 16
.Color.RGB = RGB(255, 255, 255)
.Bold = msoFalse
.Italic = msoFalse
.Shadow = False
End With
End If
End If
End If
If oshp.PlaceholderFormat.Type = 2 Or oshp.PlaceholderFormat.Type = 7 Then
'Body text change values as required
If oshp.HasTextFrame Then
If oshp.TextFrame.HasText Then
With oshp.TextFrame.TextRange.Font
.Name = "Times New Roman (Body)"
.Size = 16
.Color.RGB = RGB(255, 255, 255)
.Bold = msoFalse
.Italic = msoFalse
.Shadow = False
End With
End If
End If
End If
End If
Next oshp
Next osld
End Sub
Sub ObjectsExport()
Dim oshp As Shape
Dim osld As Slide
Dim fn As String
Dim fn2 As String
Dim i As Long
Dim slidenum As Integer
For slidenum = 1 To ActivePresentation.Slides.Count
ActiveWindow.View.GotoSlide (slidenum)
On Error Resume Next
MkDir core_path & "Slides" & pathsep
MkDir core_path & "_Flatfolder" & pathsep
MkDir core_path & "Slides" & pathsep & "Slide-" & slidenum
MkDir core_path & "Slides" & pathsep & "Slide-" & slidenum & pathsep & "Text" & pathsep
For Each osld In ActiveWindow.Selection.SlideRange
For Each oshp In osld.Shapes
i = i + 1
fn = "slide-" & slidenum & "_object-" & CStr(i) & ".png"
fn2 = "slide-" & slidenum & "_object-" & CStr(i) & ".png"
If oshp.TextFrame.HasText Then
'skip
Else
Call oshp.Export(core_path & "Slides" & pathsep & "Slide-" & slidenum & pathsep & fn, ppShapeFormatPNG)
Call oshp.Export(core_path & "_Flatfolder" & pathsep & fn2, ppShapeFormatPNG)
End If
Next oshp
Next osld
Next slidenum
End Sub
Sub ExportText()
Dim oPres As Presentation
Dim oSlides As Slides
Dim osld As Slide 'Slide Object
Dim oshp As Shape 'Shape Object
Dim iFile As Integer 'File handle for output
iFile = FreeFile 'Get a free file number
Dim FileNum As Integer
Dim i As Integer
Set oPres = ActivePresentation
Set oSlides = oPres.Slides
On Error Resume Next
MkDir core_path & "Slides" & pathsep
MkDir core_path & "_Flatfolder" & pathsep
FileNum = FreeFile
'Open output file
' NOTE: errors here if file hasn't been saved
For Each osld In oSlides 'Loop thru each slide
i = i + 1
MkDir core_path & "Slides" & pathsep & "Slide-" & i
MkDir core_path & "Slides" & pathsep & "Slide-" & i & pathsep & "Text" & pathsep
Open core_path & "Slides" & pathsep & "Slide-" & i & pathsep & "Text" & pathsep & "Slide-" & i & "-Text.TXT" For Output As FileNum
For Each oshp In osld.Shapes 'Loop thru each shape on slide
'Check to see if shape has a text frame and text
If oshp.HasTextFrame And oshp.TextFrame.HasText Then
If oshp.Type = msoPlaceholder Then
Select Case oshp.PlaceholderFormat.Type
Case Is = ppPlaceholderTitle, ppPlaceholderCenterTitle
Print #iFile, "Title:" & vbTab & oshp.TextFrame.TextRange
Case Is = ppPlaceholderBody
Print #iFile, "Body:" & vbTab & oshp.TextFrame.TextRange
Case Is = ppPlaceholderSubtitle
Print #iFile, "SubTitle:" & vbTab & oshp.TextFrame.TextRange
Case Else
Print #iFile, "Other Placeholder:" & vbTab & oshp.TextFrame.TextRange
End Select
Else
Print #iFile, vbTab & oshp.TextFrame.TextRange
End If
End If
Next oshp
Close #iFile
Next osld
End Sub
Sub ExportSpeakerNotes()
Dim osldides As Slides
Dim osld As Slide
Dim oshp As Shape
Dim strNotesText As String
Dim strFileName As String
Dim iFile As Integer
Dim lngReturn As Long
Dim i As Integer
iFile = FreeFile()
On Error Resume Next
Set osldides = ActivePresentation.Slides
For Each osld In osldides
i = i + 1
For Each oshp In osld.NotesPage.Shapes
If oshp.PlaceholderFormat.Type = ppPlaceholderBody Then
If oshp.HasTextFrame Then
If oshp.TextFrame.HasText Then
strNotesText = strNotesText & "Slide: " & CStr(osld.SlideIndex) & vbCrLf _
& oshp.TextFrame.TextRange.Text & vbCrLf & vbCrLf
End If
End If
End If
Next oshp
Open core_path & "Slides" & pathsep & "Slide-" & i & pathsep & "Text" & pathsep & "Slide-" & i & "-Text.TXT" For Append As iFile
Print #iFile, ""
Print #iFile, "Speaker Notes:"
Print #iFile, strNotesText
Close #iFile
strNotesText = ""
Next osld
End Sub
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.