2010-06-27 17 views
4

Je suis à la recherche d'un moyen de lire un lien entre les diapositives dans une seule présentation PowerPoint. J'ai besoin d'ouvrir un fichier PowerPoint et de récupérer tous les liens que les diapos ont entre eux.Comment faire pour récupérer des liens entre les diapositives PowerPoint dans une présentation

En ce moment j'utilise Aspose mais il semble qu'ils n'ont rien à lire les liens entre les diapositives.

J'ai lu plus au sujet du format de fichier de PowerPoint 2007/2010 et ai découvert que c'est juste une archive zip. Après l'avoir renommé, vous pouvez voir toutes les données XML à l'intérieur. Est-ce que quelqu'un sait lequel des nombreux fichiers xml à l'intérieur contient des informations sur la diapositive qui est liée et sur quelle diapositive?

Je dois le faire en C# ou VB.NET.

Répondre

2

Vous n'avez pas besoin d'accéder à OpenXML ici si vous n'avez pas besoin de - cela peut être fait avec le modèle objet. Voici comment cela se fait dans VBA, qui peut facilement être porté sur C# ou VB.NET.

Sub PrintInteralLinks() 
    Dim ap As Presentation 
    Set ap = ActivePresentation 
    Dim hs As Hyperlinks 
    Dim h As Hyperlink 
    Dim sl As Slide 
    Dim linkedToSlide As String 
    Dim slideTitle As Integer 
    For Each sl In ap.Slides 
     Set hs = sl.Hyperlinks 
     For Each h In hs 
      slideTitle = InStrRev(h.SubAddress, ",") 
      If slideTitle > 0 Then 
       linkedToSlide = Mid(h.SubAddress, slideTitle + 1) 
       Debug.Print sl.Name & " links to " & linkedToSlide 
      End If 
     Next 
    Next 
End Sub 

Le slideTitle = InStrRev(h.SubAddress, ",") est pas infaillible cependant. Le modèle pour les liens internes est #,#,Slide Title, donc vous devrez peut-être faire mieux avec comme certains RegEx.

0

Pour ce faire en C#, voici une bonne méthode pour trouver le diapos:

private int GetSlideIndexFromHyperlink(Hyperlink hyperlink) 
    { 
     var subAddrParts = hyperlink.SubAddress.Split(','); 
     return int.Parse(subAddrParts[1]); 
    } 

Notez que le lien hypertexte se trouve dans les ActionSettings souhaitées pour la forme que vous aimez (dans mon cas, il était shape.ActionSettings[PpMouseActivation.ppMouseClick].

Le sous-adresse pour relier dans PowerPoint est formaté comme SlideId,SlideIndex,SlideTitle. Il devrait être assez simple d'obtenir les autres parties (si désiré) avec cette méthode par quelques petits coups secs.