C#中的PowerPoint笔记

本文关键字:笔记 PowerPoint 中的 | 更新日期: 2023-09-27 17:58:33

我想阅读C#中PowerPoint幻灯片的注释。跟踪Snippet对我有效。

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

然而,这对某些演示不起作用。然后它抛出一个"超出范围"的异常。

索引2的含义是什么?有其他选择吗?

C#中的PowerPoint笔记

您不能假设notes文本占位符将位于任何特定索引,甚至不能假设它将具有特定名称。下面是VBA中的一个简单函数,它返回幻灯片的注释文本占位符:

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

结束函数

这意味着您正在尝试访问slide.NotesPage.Shapes集合的第三个元素。如果集合有2个或更少的元素,则会引发异常,因为指定索引2处的元素不存在,因此无法访问该元素——如果没有,则根本无法检索集合的第三个元素。

(索引是从零开始的,这意味着第一个元素被赋予索引0,第二个元素被给予索引1等等。因此,具有N元素的集合的最大可能索引是N-1。)

在不首先检查索引对象是否存在的情况下尝试访问索引对象是危险的,因为这可能会引发异常。您可以使用幻灯片对象的HasNotesPage属性检查幻灯片是否有注释:

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

}

如果要一次获取所有笔记,则可能需要使用NotesPage属性来检索包含所有笔记的范围。