【问题标题】:PowerPoint Notes in C#C# 中的 PowerPoint 笔记
【发布时间】:2011-06-06 13:43:50
【问题描述】:

我想阅读 C# 中 PowerPoint 幻灯片的注释。 以下片段对我有用。

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

但是,这不适用于某些演示文稿。 然后它会抛出“超出范围”异常。

索引2是什么意思?有没有其他方法可以做到这一点?

【问题讨论】:

    标签: c# powerpoint


    【解决方案1】:

    您不能假设注释文本占位符将位于任何特定索引处,甚至不能假定它具有特定名称。这是 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
    

    结束函数

    【讨论】:

      【解决方案2】:

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

      (索引从零开始,表示第一个元素的索引为0,第二个元素的索引为1 > 等等。因此,具有 N 个元素的集合的最大可能索引是 N-1。)

      【讨论】:

      • 好的,这是合乎逻辑的。音符可能不在第三个元素中,而是在另一个元素中?
      • 请参考social.msdn.microsoft.com/Forums/en-US/vsto/thread/…:“您可以使用以下代码为相应幻灯片添加演讲者备注。Slide.NotesPage.Shapes.PlaceHolders[2] 始终代表每个[幻灯片]的演讲者备注框架。”跨度>
      【解决方案3】:

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

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

      }

      如果您想一次获取所有注释,您可能需要使用NotesPage 属性来检索包含所有注释的范围。

      【讨论】:

      • HasNotesPage 在我的幻灯片类中不存在...主要问题在于,某些演示文稿具有 NotesPage 但由于索引而我无法访问它们。如果我在调试器中检查 NotesPage 形状,我得到计数​​ 3,但我无法访问形状索引 2。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多