2017-04-10 1 views
0

Est-il possible dans PowerPoint Interop utilisé à partir de C# de sélectionner par programmation une page de masque de diapositives, comme si vous sélectionniez une diapositive normale? Soit en donnant l'ID de cette page maître ou de la diapositive qui l'a comme modèle.Sélectionnez pour afficher une page de masque de diapositive avec PowerPoint Interop

j'ai réussi à changer la vue au maître de diapositive:

_pptApplication.ActiveWindow.ViewType = PpViewType.ppViewMasterThumbnails; 

J'ai essayé de sélectionner une diapositive d'abord, puis de passer à la vue principale, mais cette instruction met toujours en vue la première page maître de diapositives, non celui associé à la diapositive sélectionnée.

De même, j'aimerais savoir si cela est possible pour les notes, les polycopiés et leurs maîtres.

Répondre

1

Vous devez utiliser la méthode .Select() sur un objet CustomLayout en plus de définir .ViewType comme vous l'avez déjà compris.

Voici deux exemples:

using NetOffice.OfficeApi.Enums; 
using NetOffice.PowerPointApi.Enums; 
using System; 
using PowerPoint = NetOffice.PowerPointApi; 

namespace ExportSlides 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (var app = PowerPoint.Application.GetActiveInstance()) 
      { 
       SelectSlideMasterLayoutOfActiveSlide(app); 
       ActiveSlideMasterLayoutByIndex(app.ActivePresentation, 4); 
      } 
     } 

     private static void ActiveSlideMasterLayoutByIndex(PowerPoint.Presentation activePresentation, int customLayoutIndex) 
     { 
      activePresentation.Windows[1].ViewType = PpViewType.ppViewSlideMaster; //PpViewType.ppViewMasterThumbnails doesn't work for me for some reason 
      activePresentation.SlideMaster.CustomLayouts[customLayoutIndex].Select(); 
     } 

     private static void SelectSlideMasterLayoutOfActiveSlide(PowerPoint.Application app) 
     { 
      var activeWindow = app.ActiveWindow; 

      var slideObj = activeWindow.View.Slide; 

      if (slideObj.GetType() == typeof(PowerPoint.Slide)) 
      { 
       var slide = (PowerPoint.Slide)slideObj; 

       activeWindow.ViewType = PpViewType.ppViewSlideMaster; //PpViewType.ppViewMasterThumbnails doesn't work for me for some reason 

       slide.CustomLayout.Select(); 

      } 
     } 
    } 
} 
+0

Merci, je ne savais pas 'CustomLayout' était la clé de cette. Une remarque, cependant: quand j'ai essayé cela, ça n'a pas fonctionné en comparant 'slideObj.GetType() == typeof (PowerPoint.Slide)', à la place j'ai dû lancer 'activeWindow.View.Slide' à' Slide' et ensuite ça a marché. –

+0

Encore une question: J'ai remarqué que, lors de la sélection par index, vous ne pouvez pas sélectionner la toute première page maître de la diapositive. Existe-t-il un moyen similaire d'y parvenir? –

+0

Je pense que vous y arrivez automatiquement si vous sélectionnez ViewType, si je me souviens bien, alors essayez simplement de définir la valeur à autre chose et retour ... cela fonctionne-t-il? – Jbjstam