2010-03-07 6 views
4

L'un des groupes de ma société fonctionne sur un très grand jeu de diapositives PowerPoint. Toutes les diapositives de ce jeu ne sont pas pertinentes pour tout le monde. Le but de cette plate-forme est d'avoir une source unique de matériel que les gens peuvent choisir et choisir des diapositives selon le type de présentation qui est nécessaire. La présentation contient un certain nombre de diaporamas personnalisés prédéfinis pour faciliter ce processus.Add-In VSTO pour exporter automatiquement des diaporamas PowerPoint personnalisés

Bien que cette solution fonctionne bien dans de nombreux cas, nous avons besoin d'un moyen simple d'exporter rapidement un diaporama personnalisé vers une nouvelle présentation. Je vise à développer un complément VSTO qui permettra à un utilisateur de sélectionner un ou plusieurs diaporamas personnalisés, puis d'exporter les diaporamas sur leur bureau et je cherche du code pour m'aider à aller de l'avant.

Est-ce que quelqu'un sait comment exporter un diaporama personnalisé vers une nouvelle présentation? Mieux encore, existe-t-il un moyen de permettre aux utilisateurs de sélectionner et d'exporter un ou plusieurs spectacles existants?

Répondre

5

Grande question, je voulais faire moi-même depuis longtemps, donc nous avons pris le temps de comprendre pour vous (et moi!).

Fondamentalement, vous voulez une) boucle à travers tous NamedSlideShows, b) trouver leurs diapositives par SlideID, c) ajouter une nouvelle présentation, puis d) copier les diapositives NamedSlideShow avec la conception originale. Vous pouvez le faire pour un ou tous les shows personnalisés, en fonction de la manière dont vous envoyez les commandes.

Voici un exemple:

Sub FindShows() 
    Dim p As PowerPoint.Presentation 
    Set p = PowerPoint.ActivePresenation 
    Dim cShow As PowerPoint.NamedSlideShow 
    For Each cShow In p.SlideShowSettings.NamedSlideShows 
     SaveCustomShow (cShow.Name, p) 
     'If using PowerPoint 2010 use the following line instead: 
     'SaveCustomShow cShow.Name, p 
    Next 
End Sub 

Les FindShows sous juste trouve tous Diaporamas personnalisés dans le ActivePresentation et les envoie à une routine qui va créer la nouvelle chaque presenation en fonction du nom spécifié Custom Show. Vous pouvez personnaliser ceci au besoin.

Cette routine ci-dessous en constitue le cœur. Il y a deux choses à noter:

  • Pour envoyer sur la conception de diapositive de la diapositive source , vous devez définir la explicity diapositive copiée pour utiliser cette conception .
  • Un NamedSlideShow vous donnera seulement le SlideID des diapositives en son sein. Vous pouvez utiliser FindBySlideID pour ensuite identifier cette diapositive dans la présentation originale - il renvoie un objet diapositive . Ensuite, il suffit de le copier et collez-le avec le design de l'original .
Sub SaveCustomShow(showName As String, p As Presentation) 
     Dim cShows As PowerPoint.NamedSlideShows 
     Set cShows = p.SlideShowSettings.NamedSlideShows 
     Dim cSlideIDs As Variant 
     cSlideIDs = cShows(showName).SlideIDs 
     Dim destinationPath As String 
     destinationPath = "C:\Temp\" 
     Dim newP As PowerPoint.Presentation 
     Set newP = PowerPoint.Presentations.Add(WithWindow:=False) 
     With newP 
      .SaveAs destinationPath & cShows(showName).Name 
      Dim s As PowerPoint.Slide 
      Dim e As Integer 
      For e = 1 To UBound(cSlideIDs) 
       Set s = p.Slides.FindBySlideID(SlideID:=cSlideIDs(e)) 
       s.Copy 
       .Slides.Paste.Design = s.Design 
      Next 
      .Save 
      .Close 
     End With 
     Set newP = Nothing 
    End Sub 

Il n'y a pas d'erreur dans le code de vérification, de sorte que devra être élaboré, mais il fonctionne comme un charme!

Questions connexes