我需要使用C#更改幻灯片的布局(使用适用于Office和.NET的Add-In Express 2009)。如果新布局是预定义的布局,那么一切都很好,但如果我需要将自定义布局设置为新布局(没有幻灯片重新创建)则不行。不幸的是,我没有找到任何关于如何做的信息,PowerPoint对象模型参考文档也没有回答我。只能创建使用自定义布局的新幻灯片。
我已经做了一个实验并确保Slide
对象保持不变,而我一直在更改预定义和自定义布局。当我只需要切换布局时,我不想创建新的幻灯片。
有可能吗?请帮我找到一种方法。
答案 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。