Как получить ссылки между слайдами PowerPoint в презентации - PullRequest
4 голосов
/ 27 июня 2010

Я ищу способ прочитать ссылки между слайдами в одной презентации PowerPoint. Мне нужно открыть файл PowerPoint и получить все ссылки слайды друг с другом.

Сейчас я использую Aspose , но, похоже, у них нет ничего для чтения ссылок между слайдами.

Я прочитал еще немного о формате файлов PowerPoint 2007/2010 и обнаружил, что это всего лишь zip-архив. После переименования вы можете увидеть все данные XML внутри него. Кто-нибудь знает, какой из множества XML-файлов внутри него содержит информацию о том, на какой слайд связан и с каким слайдом?

Мне нужно сделать это в C # или VB.NET.

Ответы [ 2 ]

2 голосов
/ 01 июля 2010

Нет необходимости переходить к 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.

0 голосов
/ 01 октября 2014

Для этого в C # есть хороший способ найти связанный слайд:

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

Обратите внимание, что гиперссылка находится в нужных ActionSettings для фигуры, которая вас интересует (в моем случае это была shape.ActionSettings[PpMouseActivation.ppMouseClick].

Подадрес для связи в PowerPoint отформатирован как SlideId,SlideIndex,SlideTitle. Это должно быть довольно просто получить другие детали (при желании) с помощью этого метода через несколько небольших настроек.

...