Как программно изменить макет слайда в PowerPoint? - PullRequest
5 голосов
/ 27 мая 2010

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

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

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

Ответы [ 2 ]

4 голосов
/ 27 мая 2010

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

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
2 голосов
/ 07 марта 2013

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

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;
}

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

Подробнее об этом см. кодовое описание .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...