如何在PowerPoint中以编程方式更改幻灯片布局?

时间:2010-05-27 09:29:17

标签: c# powerpoint

我需要使用C#更改幻灯片的布局(使用适用于Office和.NET的Add-In Express 2009)。如果新布局是预定义的布局,那么一切都很好,但如果我需要将自定义布局设置为新布局(没有幻灯片重新创建)则不行。不幸的是,我没有找到任何关于如何做的信息,PowerPoint对象模型参考文档也没有回答我。只能创建使用自定义布局的新幻灯片。

我已经做了一个实验并确保Slide对象保持不变,而我一直在更改预定义和自定义布局。当我只需要切换布局时,我不想创建新的幻灯片。

有可能吗?请帮我找到一种方法。

2 个答案:

答案 0 :(得分:4)

唯一可行的方法是首先在甲板上实际使用自定义布局。然后,您只需采用该布局并将其应用于您想要的幻灯片。您可以使用自定义布局以编程方式创建新幻灯片,使用它的布局应用于另一张幻灯片,然后删除您创建的新幻灯片。以下是应用自定义布局的代码(请注意,我的 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

答案 1 :(得分:2)

你可以这样做,但实际上并不推荐。此外,以这种方式创建新幻灯片并应用布局很容易出错。在下面的代码片段中,您可以看到如何从master ....按名称检索布局。

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