开发者

PowerPoint Notes in C#

开发者 https://www.devze.com 2023-03-10 23:04 出处:网络
I want to read the notes of a PowerPoint Slide in C#. Following Snipp开发者_开发百科et works for me.

I want to read the notes of a PowerPoint Slide in C#. Following Snipp开发者_开发百科et works for me.

slide.NotesPage.Shapes[2].TextFrame.TextRange.Text

However, this doesn't work for some presentations. Then it throws an "Out of range" exception.

What ist the meaning of index 2? Are there any alternative to do this?


You can't assume that the notes text placeholder will be at any specific index or even that it'll have a specific name. Here's a simple function in VBA that returns the notes text placeholder for a slide:

Function NotesTextPlaceholder(oSl As Slide) As Shape

Dim osh As Shape

For Each osh In oSl.NotesPage.Shapes

    If osh.Type = msoPlaceholder Then
        If osh.PlaceholderFormat.Type = ppPlaceholderBody Then
            ' we found it
            Set NotesTextPlaceholder = osh
            Exit Function
        End If
    End If

Next

End Function


It means that you are trying to access the third element of the slide.NotesPage.Shapes collection. If the collection has 2 elements or less, the exception is thrown because the element at the specified index 2 could not be accessed since it doesn't exist — you simply cannot retrieve a collection's third element if it doesn't have one.

(The index is zero-based, meaning that the first element is given the index 0, the second one is given the index 1 and so on. Thus, the greatest possible index of a collection with N elements is N-1.)


It's dangerous to try and access an index object without checking if it exists first, since this might throw exceptions. You can check if the slide has notes with the HasNotesPage property of the slide object:

if(slide.HasNotesPage == Microsoft.Office.Core.MsoTriState.msoTrue) {

}

If you want to get all the notes at once, you might want to use NotesPage property to retrieve a range with all notes.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号