2010-05-27 8 views
5

J'ai besoin de modifier la mise en page d'une diapositive avec C# (Add-In Express 2009 pour Office et .NET est utilisé). Si la nouvelle disposition est prédéfinie, alors tout va bien, mais pas si j'ai besoin de définir une mise en page personnalisée en tant que nouvelle (sans recréer de diapositive). Malheureusement, je n'ai trouvé aucune information sur la façon de le faire, la documentation de référence du modèle d'objet PowerPoint ne me répondait pas non plus. Il y a juste la possibilité de créer une nouvelle diapositive qui utilise une disposition personnalisée.Comment modifier la disposition des diapositives par programme dans PowerPoint?

J'ai fait une expérience et je me suis assuré que l'objet Slide est resté le même pendant que je changeais de disposition à la fois prédéfinie et personnalisée. Je ne veux pas créer une nouvelle diapositive quand j'ai juste besoin de changer la disposition.

Est-ce possible? Aidez-moi s'il vous plaît à trouver un moyen de le faire.

Répondre

4

La seule façon dont cela fonctionnera, c'est si votre mise en page personnalisée est utilisée dans le deck en premier. Ensuite, vous prenez simplement cette disposition et l'appliquer à la diapositive que vous voulez. Vous pouvez créer une nouvelle diapositive avec votre mise en page personnalisée, utiliser sa mise en page pour l'appliquer à une autre diapositive, puis supprimer cette nouvelle diapositive que vous avez créée. Voici le code pour appliquer la mise en page personnalisée (notez que mon ap.Slides(2) est une mise en page personnalisée)

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

Merci beaucoup! Ça marche!! –

2

Vous pouvez le faire, mais il est vraiment pas recommandé. En outre, créer une nouvelle diapositive de cette façon et appliquer la mise en page est sujette à des erreurs. Dans l'extrait de code ci-dessous vous pouvez voir comment récupérer une mise en page par le nom du maître ....

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

alors vous pouvez l'assigner à la diapositive que vous avez vu ci-dessus. Cependant, si les dispositions sont incompatibles, les résultats peuvent être imprévisibles. Je suppose que les diapositives sont au moins relativement les mêmes. Vous devriez essayer de créer une nouvelle diapositive et de copier le contenu pour éviter d'être l'otage des changements dans le thème ou le modèle sous-jacent. Pour plus d'informations, voir code descriptions.