События PowerPoint 2010 не запускаются в C # - PullRequest
1 голос
/ 11 октября 2010

Я пишу приложение, которое использует библиотеку взаимодействия PowerPoint для Office 2010. Предполагается, что он откроет PowerPoint, загрузит презентацию и подождет, пока пользователь сохранит презентацию после внесения изменений.Я хочу, чтобы приложение загружало презентацию на сервер после обновления.

Проблема, с которой я столкнулся, заключается в том, что события PresentationSave или PresentationBeforeSave не запускаются при сохранении презентации.

Вот код, который я использовал:

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");
    }

Есть идеи, почему он не работает?

Ответы [ 2 ]

1 голос
/ 12 октября 2010

Хорошо, оказывается, мне пришлось использовать делегат в обработчике событий. Вот код, который работал, на случай, если кому-то понадобится его для справки:

    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 голосов
/ 11 октября 2010

Это потому, что ваш код выше не вызывает ppt.Save();, он просто вызывает .Open().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...