如何检索演示文稿中PowerPoint幻灯片之间的链接

时间:2010-06-27 04:42:22

标签: c# .net ms-office powerpoint office-interop

我正在寻找一种方法来阅读单个PowerPoint演示文稿中的幻灯片之间的链接。我需要打开一个PowerPoint文件并检索幻灯片彼此之间的所有链接。

现在我正在使用Aspose,但似乎他们没有任何内容可以阅读幻灯片之间的链接。

我已经阅读了有关PowerPoint 2007/2010文件格式的更多信息,并发现它只是一个zip存档。重命名后,您可以看到其中的所有xml数据。有没有人知道里面的许多xml文件中的哪一个包含哪些幻灯片链接的信息以及哪张幻灯片?

我需要在C#或VB.NET中完成。

2 个答案:

答案 0 :(得分:2)

如果您不需要,则无需在此处转到OpenXML - 可以使用对象模型完成此操作。这是在VBA中完成的方式,可以很容易地移植到C#或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

虽然slideTitle = InStrRev(h.SubAddress, ",")并非万无一失。内部链接的模式是#,#,Slide Title,因此您可能需要像使用一些RegEx一样做得更好。

答案 1 :(得分:0)

要在C#中完成此操作,这是查找链接幻灯片的好方法:

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

请注意,超链接位于您关注的Shape所需的ActionSettings中(在我的情况下是shape.ActionSettings[PpMouseActivation.ppMouseClick]

PowerPoint中链接的子地址格式为SlideId,SlideIndex,SlideTitle。通过一些小的调整,通过这种方法获得其他部分(如果需要)应该相当简单。