2010-10-11 18 views
1

我正在編寫一個應用程序,它使用Office 2010的PowerPoint互操作庫。它應該打開PowerPoint,加載演示文稿並等待用戶在進行更改後保存演示文稿。我希望應用程序在更新後將演示文稿上傳到服務器。未在C中發起的PowerPoint 2010事件#

我遇到的問題是PresentationSavePresentationBeforeSave事件不會在保存演示文稿時觸發。

下面是我使用的代碼:

private void startPPT() 
{ 
     app = new ApplicationClass(); 

     app.WindowState = PpWindowState.ppWindowMaximized; 
     app.Visible = MsoTriState.msoTrue; 

     app.PresentationBeforeSave += new EApplication_PresentationBeforeSaveEventHandler(app_PresentationBeforeSave); 
     app.PresentationSave += new EApplication_PresentationSaveEventHandler(app_PresentationSave); 

     Presentation ppt; 

     //check if it's pptx or ppt and open accordingly 
     FileInfo fi = new FileInfo(filename); 
     if (fi.Extension == ".pptx") 
     { 
      //version 2007 
      ppt = app.Presentations.Open2007(filename, MsoTriState.msoFalse, MsoTriState.msoFalse); 
     } 
     else 
     { 
      //version 2003 or older 
      ppt = app.Presentations.Open(filename, MsoTriState.msoFalse, MsoTriState.msoFalse); 
     } 
} 

    void app_PresentationSave(Presentation Pres) 
    { 
     MessageBox.Show("Saved"); 
    } 

任何想法,爲什麼它不工作?

+0

你的代碼爲我工作,謝謝 – 2013-09-04 08:25:24

回答

1

好的,事實證明我不得不在事件處理程序中使用委託。下面是工作的代碼,如果有人需要它以供參考:

private void startPPT() 
    { 
    // as above 
    } 

    private delegate void CallBackPPTSaved(Presentation p); 

    void app_PresentationSave(Presentation Pres) 
    { 
     this.Dispatcher.BeginInvoke(new CallBackPPT(PPTEventHandler), System.Windows.Threading.DispatcherPriority.Normal, Pres); 
    } 

    private void PPTEventHandler(Presentation p) 
    { 
     MessageBox.Show("Saved"); 
    } 
0

這是因爲你上面的代碼沒有調用ppt.Save();,它只是調用.Open()

+0

但不會在PresentationSave事件觸發,以及如果用戶通過點擊保存從PowerPoint演示文稿像往常一樣保存按鈕? – subeeshb 2010-10-12 00:19:01