我想在C#中阅读PowerPoint幻灯片的注释。
以下代码段适用于我。
slide.NotesPage.Shapes[2].TextFrame.TextRange.Text
然而,这对于某些演示文稿并不起作用。然后会抛出“超出范围”的异常。
索引2的含义是什么?有其他替代方法吗?
slide.NotesPage.Shapes[2].TextFrame.TextRange.Text
然而,这对于某些演示文稿并不起作用。然后会抛出“超出范围”的异常。
索引2的含义是什么?有其他替代方法吗?
您不能假设笔记文本占位符将在任何特定索引处,甚至不能假设它具有特定名称。以下是一个简单的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属性来检索包含所有注释的范围。
HasNotesPage
...主要问题是,有些演示文稿具有NotesPage,但由于索引的原因,我无法访问它们。如果我在调试器中检查NotesPage Shapes,我会得到计数3,但我无法访问形状索引2。 - Julian Hinderer