【发布时间】:2011-06-06 13:43:50
【问题描述】:
我想阅读 C# 中 PowerPoint 幻灯片的注释。 以下片段对我有用。
slide.NotesPage.Shapes[2].TextFrame.TextRange.Text
但是,这不适用于某些演示文稿。 然后它会抛出“超出范围”异常。
索引2是什么意思?有没有其他方法可以做到这一点?
【问题讨论】:
标签: c# powerpoint
我想阅读 C# 中 PowerPoint 幻灯片的注释。 以下片段对我有用。
slide.NotesPage.Shapes[2].TextFrame.TextRange.Text
但是,这不适用于某些演示文稿。 然后它会抛出“超出范围”异常。
索引2是什么意思?有没有其他方法可以做到这一点?
【问题讨论】:
标签: c# powerpoint
您不能假设注释文本占位符将位于任何特定索引处,甚至不能假定它具有特定名称。这是 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。)
【讨论】:
Slide.NotesPage.Shapes.PlaceHolders[2] 始终代表每个[幻灯片]的演讲者备注框架。”跨度>
尝试访问索引对象而不先检查它是否存在是很危险的,因为这可能会引发异常。您可以使用幻灯片对象的HasNotesPage 属性检查幻灯片是否有注释:
if(slide.HasNotesPage == Microsoft.Office.Core.MsoTriState.msoTrue) {
}
如果您想一次获取所有注释,您可能需要使用NotesPage 属性来检索包含所有注释的范围。
【讨论】:
HasNotesPage 在我的幻灯片类中不存在...主要问题在于,某些演示文稿具有 NotesPage 但由于索引而我无法访问它们。如果我在调试器中检查 NotesPage 形状,我得到计数 3,但我无法访问形状索引 2。