自动导出自定义 PowerPoint 幻灯片演示的 VSTO 插件

4
我公司的一个小组正在制作一份非常大的PowerPoint幻灯片集。这个集合中并不是所有的幻灯片都与每个人相关。这个幻灯片集的目的是提供一个单一的材料来源,人们可以根据需要选择幻灯片来进行演示。该幻灯片集有许多预定义的自定义幻灯片展示,以使这个过程更加容易。
虽然这种解决方案在许多情况下运行良好,但我们需要一种简单的方法快速将自定义幻灯片展示导出到新的演示文稿中。我打算开发一个VSTO插件,允许用户选择一个或多个自定义幻灯片展示,然后将它们导出到他们的桌面上,并且我正在寻找一些代码来帮助我入门。
有人知道如何将现有的自定义幻灯片展示导出到新的演示文稿中吗?更好的是,是否有一种方法允许用户选择并导出一个或多个现有的展示?
2个回答

3

非常好的问题,我自己也想做这个很长时间了,所以花时间为您(和我)找出了答案。

基本上,您需要a)循环遍历所有的NamedSlideShows,b)通过SlideID查找它们的幻灯片,c)添加一个新的演示文稿,然后d)将NamedSlideShow幻灯片与原始设计一起复制。您可以根据发送命令的方式为一个或多个自定义演示文稿执行此操作。

以下是一个例子:

Sub FindShows()
    Dim p As PowerPoint.Presentation
    Set p = PowerPoint.ActivePresenation
    Dim cShow As PowerPoint.NamedSlideShow
    For Each cShow In p.SlideShowSettings.NamedSlideShows
        SaveCustomShow (cShow.Name, p)
        'If using PowerPoint 2010 use the following line instead:
        'SaveCustomShow cShow.Name, p
    Next
End Sub
FindShows子程序只是查找ActivePresentation中的所有自定义演示文稿,并将它们发送到一个例程,该例程将根据指定的自定义演示文稿名称创建每个新演示文稿。您可以根据需要进行自定义。
下面的例程是关键所在。有几点需要注意:
  • 为了发送源幻灯片的幻灯片设计,您必须显式地设置复制的幻灯片以使用该设计。
  • NamedSlideShow仅会给出其中幻灯片的SlideID。您可以使用FindBySlideID来识别原始演示文稿中的该幻灯片 - 它返回一个幻灯片对象。然后您只需将其复制并粘贴到原始幻灯片的设计中即可。
    Sub SaveCustomShow(showName As String, p As Presentation)
        Dim cShows As PowerPoint.NamedSlideShows
        Set cShows = p.SlideShowSettings.NamedSlideShows
        Dim cSlideIDs As Variant
        cSlideIDs = cShows(showName).SlideIDs
        Dim destinationPath As String
        destinationPath = "C:\Temp\"
        Dim newP As PowerPoint.Presentation
        Set newP = PowerPoint.Presentations.Add(WithWindow:=False)
        With newP
            .SaveAs destinationPath & cShows(showName).Name
            Dim s As PowerPoint.Slide
            Dim e As Integer
            For e = 1 To UBound(cSlideIDs)
                Set s = p.Slides.FindBySlideID(SlideID:=cSlideIDs(e))
                s.Copy
                .Slides.Paste.Design = s.Design
            Next
           .Save
           .Close
        End With
        Set newP = Nothing
    End Sub

代码中没有任何错误检查,因此需要进行调整,但它的运行效果非常好!


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接