2014-01-07 4 views
0

다음은 내가 수행해온 코드입니다. 슬라이드에 메모가있는 메시지 상자가 표시되어야한다고 생각하지만 그렇지 않습니다. 또한 나는 그 중 일부를 가지고 있지만 잘못된 장소에있을 수있는 코드로 음성 합성을 구현하는 방법을 모르겠습니다. 프레젠테이션을보고/O를, 나는이 문제인지 알 수는 없지만, 당신이 노트 페이지의 두 번째 형태는 노트 텍스트 자리 표시 자입니다 가정하고 W슬라이드의 노트에 텍스트를 가져와 오디오로 변환하는 파워 포인트 추가 기능. 슬라이드에서 노트를 가져 오는 것 같지 않습니까?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml.Linq; 
using PowerPoint = Microsoft.Office.Interop.PowerPoint; 
using Office = Microsoft.Office.Core; 
using Microsoft.Office.Interop.PowerPoint; 
using System.Speech.Synthesis; 


namespace FirstPowerPointAddIn 
{ 
public partial class ThisAddIn 
{ 
private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 


     SpeechSynthesizer synth = new SpeechSynthesizer(); 
     // Configure the audio output. 
     synth.SetOutputToDefaultAudioDevice(); 

    PowerPoint.Application oPowerPoint = null; 
    try 
     { 
      oPowerPoint.SlideShowBegin += oPowerPoint_SlideShowBegin; 



      oPowerPoint.SlideShowNextSlide += oPowerPoint_SlideShowNextSlide; 

     } 
     catch(Exception) 
     { 
      Console.WriteLine("error"); 
     } 
    } 



    private void ThisAddIn_Shutdown(object Pender, System.EventArgs e) 
    { 
    } 



    private void oPowerPoint_SlideShowBegin(SlideShowWindow Wn) 

    // If the slide has notes, get the notes 
    { 
     if (Wn.View.Slide.HasNotesPage == Microsoft.Office.Core.MsoTriState.msoTrue) 
     { 

      if (Wn.View.Slide.NotesPage.Shapes[2].TextFrame.HasText == Microsoft.Office.Core.MsoTriState.msoTrue) 

       System.Windows.Forms.MessageBox.Show(Wn.View.Slide.NotesPage.Shapes[2].TextFrame.TextRange.Text); 



     } 
    } 
    void oPowerPoint_SlideShowNextSlide(PowerPoint.SlideShowWindow Wn) 
    { 

     if (Wn.View.Slide.HasNotesPage == Microsoft.Office.Core.MsoTriState.msoTrue) 
     { 

      if (Wn.View.Slide.NotesPage.Shapes[2].TextFrame.HasText == Microsoft.Office.Core.MsoTriState.msoTrue) 

       System.Windows.Forms.MessageBox.Show(Wn.View.Slide.NotesPage.Shapes[2].TextFrame.TextRange.Text); 



     } 
    } 

    #region VSTO generated code 

    /// <summary> 
    /// Required method for Designer support - do not modify 
    /// the contents of this method with the code editor. 
    /// </summary> 
    private void InternalStartup() 
    { 
     this.Startup += new System.EventHandler(ThisAddIn_Startup); 
     this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); 
    } 

    #endregion 
} 

}

+0

내가 파워 포인트 물건 모르는를, 하지만 이것은 음성 합성 측면에서 당신을 도울 수 있습니다 [http://www.codeproject.com/Articles/28725/A-Very-Easy-Introduction-to-Microsoft-NET-Speech-S] – Eisenhorn

답변

0

. 그것은 대개의 경우이지만 반드시 그런 것은 아닙니다.

최신 버전의 PPT에서는 Notes 자리 표시 자 # (여기서 #은 2 일 수도 있고 그렇지 않을 수도있는 숫자 임)를 찾는 도형을 반복 할 수 있습니다. 오래된 이름의 프리젠 테이션에서는 모양 이름이 달라집니다. 관심있는 것들에 대한 스티브 Rindsberg의 VB 코드의

Sub FindTheNotesText() 
    Dim oSl As Slide 
    Dim x As Long 
    Set oSl = ActivePresentation.Slides(1) 
    With oSl.NotesPage 
     For x = 1 To .Shapes.Count 
      With .Shapes(x) 
       Debug.Print .Name 
       Debug.Print .Type 
       If .Type = msoPlaceholder Then 
        Debug.Print .PlaceholderFormat.Type 
        If .PlaceholderFormat.Type = ppPlaceholderBody Then 
         Debug.Print "^^^^^ This is the notes text placeholder" 
         Debug.Print .TextFrame.TextRange.Text 
        End If 

       End If 
      End With 
     Next 
    End With 
End Sub 
+0

코드 작성이 가능합니까 그게 C#? 나는 나이에 그것을 여기에서 일하고 있고, 그것을 바꾸는 것처럼 보일 수 없다. – user3169544

+0

어디서부터 시작해야할지 모르겠습니다. .NET을 여러 가지 이유로하지 않습니다. 반면, PPT를 자동화하는 C#을 사용하면 작동하지 않는 이유를 분류 할 수 있습니다. 물론 여기에있는 다른 사람들도 할 수있을 것입니다. 그래서 지금까지 가지고있는 것을 게시하십시오. –

2

C# 버전 : 그 이유로, 이런 식으로 뭔가 할하는 것이 최선의

PowerPoint.SlideShowWindow ppWindow; 
PowerPoint.Slide   slide  = ppWindow.View.Slide; 
if (slide.HasNotesPage == MsoTriState.msoTrue) { 
    PowerPoint.SlideRange notesPages = slide.NotesPage; 
    foreach (PowerPoint.Shape shape in notesPages.Shapes) { 
     if (shape.Type == MsoShapeType.msoPlaceholder) { 
      if (shape.PlaceholderFormat.Type == PowerPoint.PpPlaceholderType.ppPlaceholderBody) { 
       Debug.WriteLine("Slide[" + slide.SlideIndex + "] Notes: [" + shape.TextFrame.TextRange.Text + "]");    
      } 
     } 
    } 
}