2010-01-29 7 views

Répondre

4

Je crois que ce serait peut-être ce que vous cherchez:

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

HI Chris, je l'ai essayé. cela fonctionne sur la plupart des diapositives. sauf la dernière page, je rencontrerai une ArgumentException. pourriez-vous l'expliquer un peu? Quelle est la magie 2 signifie ici? Merci d'avance – StanleyZ

+2

Cochez cette question. Il a une meilleure réponse alors ce que j'ai fourni: http://stackoverflow.com/questions/6252927/powerpoint-notes-in-c-sharp – Crispy

+0

Vous ne devriez pas coder les nombres magiques. Vous ne pouvez pas garantir que ce sera l'élément [2] dans le tableau Shapes. Probablement la cause de l'erreur sur la dernière diapositive. – Simon

1

Voici mon code que j'utilise pour obtenir les notes de diapositives. Toujours en développement, mais semble faire l'affaire pour le moment. Même dans mon test PPT simple, les notes de diapositives ne sont pas toujours l'élément [2] dans le tableau de formes, il est donc important de vérifier.

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

Comme vous le dites, certains TextFrames n'ont pas de plage, mais au lieu de lancer une exception lorsque vous essayez d'y accéder en premier, vérifiez si (frame.HasText == Office.MsoTriState.msoTrue). –

Questions connexes