Надстройка VSTO для автоматического экспорта пользовательских слайд-шоу PowerPoint

Одна из групп в моей компании работает над очень большой презентацией PowerPoint. Не все слайды в этой колоде актуальны для всех. Цель этой колоды состоит в том, чтобы иметь единственный источник материала, из которого люди могут выбирать слайды в зависимости от типа необходимой презентации. В наборе слайдов есть несколько предопределенных пользовательских слайд-шоу, которые упрощают этот процесс.

Хотя это решение хорошо работает во многих случаях, нам нужен простой способ быстро экспортировать пользовательское шоу в новую презентацию. Я стремлюсь разработать надстройку VSTO, которая позволит пользователю выбрать одно или несколько пользовательских слайд-шоу, а затем экспортировать слайд-шоу на свой рабочий стол, и я ищу код, который поможет мне в этом.

Кто-нибудь знает, как экспортировать существующее пользовательское шоу в новую презентацию? Еще лучше, есть ли способ позволить пользователям выбирать и экспортировать одно или несколько существующих шоу?


person NakedBrunch    schedule 07.03.2010    source источник


Ответы (2)


Отличный вопрос, я давно хотел сделать это сам, поэтому нашел время, чтобы понять это для вас (и для меня!).

По сути, вам нужно а) перебрать все NamedSlideShows, б) найти их слайды по SlideID, в) добавить новую презентацию, а затем г) скопировать 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

В коде нет проверки ошибок, так что это нужно будет проработать, но это работает как шарм!

person Todd Main    schedule 11.03.2010

Это работает удовольствие! будьте осторожны, чтобы сначала создать копию файла!

http://www.pptfaq.com/FAQ00893.htm

person Aidan Bourke    schedule 09.03.2010