2010-01-29 21 views

Respuesta

4

Creo que esto podría ser lo que buscas:

string s = slide.NotesPage.Shapes[2].TextFrame.TextRange.Text 
slide.NotesPage.Shapes[2].TextFrame.TextRange.Text = "Hello World" 
+0

HI Chris, lo intenté. funciona en la mayoría de las diapositivas. excepto la última página, me encontraré con una ArgumentException. podrías explicarlo un poco? ¿Cuál es la magia 2 significa aquí? Gracias de antemano – StanleyZ

+2

Marque esta pregunta. Tiene una mejor respuesta, entonces lo que siempre que: http://stackoverflow.com/questions/6252927/powerpoint-notes-in-c-sharp – Crispy

+0

las que debería escribir no es difícil números mágicos. No puede garantizar que será el elemento [2] en la matriz Shapes. Probablemente la causa del error en la última diapositiva. – Simon

1

Aquí está mi código que utilizo para obtener las notas de las diapositivas. Sigue desarrollándolo, pero parece ser el truco por el momento. Incluso en mi PPT simple de prueba, las notas de diapositivas no siempre son el elemento [2] en la matriz de formas, por lo que es importante verificarlo.

private string GetNotes(Slide slide) 
    { 
     if (slide.HasNotesPage == MsoTriState.msoFalse) 
      return string.Empty; 

     string slideNodes = string.Empty; 
     var notesPage = slide.NotesPage; 
     int length = 0; 
     foreach (Shape shape in notesPage.Shapes) 
     { 
      if (shape.Type == MsoShapeType.msoPlaceholder) 
      { 
       var tf = shape.TextFrame; 
       try 
       { 
        //Some TextFrames do not have a range 
        var range = tf.TextRange; 
        if (range.Length > length) 
        { //Some have a digit in the text, 
         //so find the longest text item and return that 
         slideNodes = range.Text; 
         length = range.Length; 
        } 
        Marshal.ReleaseComObject(range); 
       } 
       catch (Exception) 
       {} 
       finally 
       { //Ensure clear up 
        Marshal.ReleaseComObject(tf); 
       } 
      } 
      Marshal.ReleaseComObject(shape); 
     } 
     return slideNodes; 
    } 
+0

Como usted dice, algunos TextFrames no tienen un rango, pero en lugar de lanzar una excepción cuando intenta acceder a él en primer lugar, comprobar si (== frame.HasText Office.MsoTriState.msoTrue). –

Cuestiones relacionadas