2010-05-27 68 views
5

我需要使用C#(使用Office和.NET的Add-In Express 2009)更改幻燈片的佈局程序。如果新的佈局是預定義的佈局,那麼一切都很好,但如果我需要將自定義佈局設置爲新佈局(無需重新創建幻燈片),則不會。不幸的是,我沒有找到任何有關如何操作的信息,PowerPoint對象模型參考文檔也沒有回答我的問題。只有創建使用自定義佈局的新幻燈片的功能。如何在PowerPoint中以編程方式更改幻燈片佈局?

我已經做了一個實驗,並確保Slide對象保持不變,而我一直在更改預定義和自定義佈局的佈局。當我需要切換佈局時,我不想創建新的幻燈片。

有沒有可能?請幫助我找到一種方法。

回答

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 
+0

非常感謝!有用!! – 2010-05-27 16:26:53

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

相關問題