2011-06-06 21 views
5

Quiero leer las notas de una diapositiva de PowerPoint en C#. A continuación, Snippet funciona para mí.Notas de PowerPoint en C#

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

Sin embargo, esto no funciona para algunas presentaciones. Luego arroja una excepción de "Fuera de rango".

¿Cuál es el significado del índice 2? ¿Hay alguna alternativa para hacer esto?

Respuesta

6

No puede suponer que el marcador de posición de texto de notas estará en un índice específico o incluso que tendrá un nombre específico. He aquí una simple función de VBA que devuelve el texto de notas marcador de posición para una diapositiva:

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

1

Significa que está intentando acceder al tercer elemento de la colección slide.NotesPage.Shapes. Si la colección tiene 2 elementos o menos, se lanza la excepción porque no se pudo acceder al elemento en el índice especificado , ya que no existe; simplemente no puede recuperar el tercer elemento de una colección si no tiene uno.

(el índice es basado en cero, lo que significa que el primer elemento se da el índice , el segundo se da el índice y así sucesivamente. De este modo, el mayor índice posible de una colección con N elementos es N-1.)

+0

bien, esto es lógico. ¿Es posible que las notas no estén en el tercer elemento sino en otro? –

+0

Consulte http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/2d629b60-a21c-4f58-9aaf-05561917df61: "Puede usar los siguientes códigos para agregar una nota de altavoz a la correspondiente El 'Slide.NotesPage.Shapes.PlaceHolders [2]' siempre representa el Frame SpeakerNotes para cada [diapositiva]. " –

0

es peligroso tratar de acceder a un objeto de índice sin comprobar primero si es que existe, ya que esto podría lanzar excepciones. Puede comprobar si el carro tiene notas con la propiedad HasNotesPage del objeto de diapositiva:

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

}

Si desea obtener todas las notas a la vez, es posible que desee utilizar la propiedad NotesPage para recuperar un rango con todas las notas.

+0

'HasNotesPage' no existe en mi clase de diapositiva ... El problema principal es que algunas presentaciones tienen la página de notas, pero no puedo acceder a ellas debido al índice. Si compruebo las formas de NotesPage en el depurador obtuve el conteo 3 pero no puedo acceder al índice de forma 2. –