2010-05-27 12 views
5

Devo modificare il layout di una diapositiva in modo programmatico con C# (viene utilizzato Add-In Express 2009 per Office e .NET). Se il nuovo layout è predefinito, allora tutto va bene, ma non se ho bisogno di impostare un layout personalizzato come uno nuovo (senza ricreare la diapositiva). Sfortunatamente, non ho trovato alcuna informazione su come farlo, la documentazione di riferimento del modello a oggetti di PowerPoint non ha risposto anche a me. C'è solo la possibilità di creare una nuova diapositiva che utilizza il layout personalizzato.Come modificare la disposizione delle diapositive in modo programmatico in PowerPoint?

Ho fatto un esperimento e mi sono assicurato che l'oggetto Slide rimanesse invariato mentre modificavo il layout sia predefinito che personalizzato. Non voglio creare una nuova diapositiva quando ho solo bisogno di cambiare il layout.

È possibile a tutti? Per favore aiutami a trovare un modo per farlo.

risposta

4

L'unico modo in cui funzionerà è se il layout personalizzato viene effettivamente utilizzato nel mazzo. Quindi devi semplicemente prendere quel layout e applicarlo alla diapositiva che desideri. È possibile creare una nuova diapositiva in modo programmatico con il layout personalizzato, utilizzare il layout per applicarlo a un'altra diapositiva e quindi eliminare la nuova diapositiva creata. Ecco il codice per applicare il layout personalizzato (si noti che il mio ap.Slides(2) è un layout personalizzato)

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

Grazie mille! Funziona!! –

2

si poteva fare, ma non è davvero raccomandato. Inoltre, creando una nuova diapositiva in questo modo e applicando il layout è soggetto a errori. Nel seguente frammento di codice è possibile vedere come recuperare un layout in base al nome del maestro ....

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

poi si può assegnare alla diapositiva come avete visto sopra. Tuttavia, se i layout non sono compatibili, i risultati potrebbero essere imprevedibili. Suppongo che le diapositive siano almeno relativamente le stesse. Dovresti provare a creare una nuova diapositiva e copiare il contenuto per evitare di essere ostaggio delle modifiche nel tema o modello sottostante.

Vedere code descriptions per ulteriori informazioni.

Problemi correlati