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

C# 如何检索演示文稿中PowerPoint幻灯片之间的链接,c#,.net,ms-office,powerpoint,office-interop,C#,.net,Ms Office,Powerpoint,Office Interop,我正在寻找一种方法来阅读单个PowerPoint演示文稿中幻灯片之间的链接。我需要打开一个PowerPoint文件并检索幻灯片之间的所有链接 现在我正在使用,但他们似乎没有任何东西可以阅读幻灯片之间的链接 我读了更多关于PowerPoint 2007/2010文件格式的内容,发现它只是一个zip存档。重命名后,可以看到其中的所有xml数据。有人知道它里面的许多xml文件中的哪一个包含信息哪张幻灯片链接到哪张幻灯片吗 我需要在C#或VB.NET中完成这项工作。如果不需要的话,这里不需要转到Open

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

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

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


我需要在C#或VB.NET中完成这项工作。

如果不需要的话,这里不需要转到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,“,”)
并不是万无一失的。内部链接的模式是
#、#、幻灯片标题
,因此您可能需要使用一些正则表达式来改善这一点。

要在C#中实现这一点,以下是查找链接幻灯片的好方法:

    private int GetSlideIndexFromHyperlink(Hyperlink hyperlink)
    {
        var subAddrParts = hyperlink.SubAddress.Split(',');
        return int.Parse(subAddrParts[1]);
    }
请注意,超链接位于您所关心的形状的所需操作设置中(在我的示例中,它是
Shape.ActionSettings[PpMouseActivation.ppMouseClick]

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