2010-03-07 59 views
4

我公司的一个组在一个非常大的PowerPoint幻灯片工作区上工作。并非所有的幻灯片都适合每个人。该套牌的目的是提供一个单一的材料来源,人们可以根据需要的演示类型选择幻灯片。幻灯片中有许多预定义的自定义幻灯片,可以使此过程更加轻松。VSTO加载项自动导出自定义PowerPoint幻灯片

虽然此解决方案在许多情况下运行良好,但我们需要一种简单的方法将自定义显示快速导出到新的演示文稿。我打算开发一个VSTO加载项,允许用户选择一个或多个自定义幻灯片,然后将幻灯片导出到他们的桌面,我正在寻找一些代码来帮助我走上正轨。

有谁知道如何将现有的自定义显示导出到新的演示文稿?更好的是,有没有办法让用户选择和导出一个或多个现有的节目?

回答

5

大的问题,我想这个很长一段时间做自己,所以走上弄清楚你的时间(和我!)。

基本上,你会通过所有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,并将它们发送到将创建一个基于指定的自定义放映的名称每个新presenation的例程。您可以根据需要进行自定义。

下面的例程是它的核心。有几件事情需要注意:

  • 要通过 源滑动的滑盖设计派,你必须设置复制幻灯片使用 设计明确地 。
  • A 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 

这里没有任何错误代码检查,这样就需要被制定出来,但它就像一个魅力!