2010-05-27 8 views
5

Мне нужно изменить макет слайда программно с помощью C# (используется Add-In Express 2009 для Office и .NET). Если новый макет является предопределенным, тогда все будет хорошо, но нет, если мне нужно установить собственный макет как новый (без воссоздания слайдов). К сожалению, я не нашел никакой информации о том, как это сделать, справочная документация объектной модели PowerPoint также не отвечала мне. Есть только возможность создать новый слайд, который использует пользовательский макет.Как изменить формат слайдов программно в PowerPoint?

Я провел эксперимент и убедился, что объект Slide остался прежним, пока я менял макет как предопределенных, так и пользовательских. Я не хочу создавать новый слайд, когда мне нужно просто переключить макет.

Возможно ли вообще? Пожалуйста, помогите мне найти способ сделать это.

ответ

4

Единственный способ, которым это будет работать, - это то, что ваш пользовательский макет фактически используется в колоде. Затем вы просто берете этот макет и применяете его к слайду, который вы хотите. Вы могли бы программно создать новый слайд со своим настраиваемым макетом, использовать его макет, чтобы применить его к другому слайду, а затем удалить новый слайд, который вы создали. Вот код, чтобы применить пользовательский макет (обратите внимание, что мой ap.Slides(2) является заказ Layout)

Sub ChangeLayout() 
    Dim ap As Presentation 
    Set ap = ActivePresentation 
    Dim slide1 As Slide 
    Set slide1 = ap.Slides(1) 
    Dim customLayout As PpSlideLayout 
    customLayout = ap.Slides(2).Layout 
    slide1.Layout = ly 
End Sub 
+0

спасибо! Оно работает!! –

2

Вы можете сделать это, но это действительно не рекомендуется. Кроме того, создание нового слайда таким образом и применение макета подвержено ошибкам. В следующем фрагменте кода вы можете увидеть, как получить раскладку по имени от мастера ....

private PowerPoint.CustomLayout DpGetCustomLayout(
     PowerPoint.Presentation ppPresentation, string myLayout) 
{ 
    // 
    // Given a custom layout name, find the layout in the master slide and return it 
    // Return null if not found 
    // 
    PowerPoint.CustomLayout ppCustomLayout = null; 

    for (int i = 0; i < ppPresentation.SlideMaster.CustomLayouts.Count; i++) 
    { 
     if (ppPresentation.SlideMaster.CustomLayouts[i + 1].Name == myLayout) 
      ppCustomLayout = ppPresentation.SlideMaster.CustomLayouts[i + 1]; 
    } 
     return ppCustomLayout; 
} 

, то вы можете назначить его на слайде, как вы видели выше. Однако, если макеты несовместимы, результаты могут быть непредсказуемыми. Я предполагаю, что слайды по крайней мере относительно одинаковы. Вы должны попытаться создать новый слайд и скопировать содержимое, чтобы избежать заложников изменений в основной теме или шаблоне.

См. code descriptions для получения более подробной информации.

Смежные вопросы