none
Powerpoint - Interop, Präsentation mit Klick-Animationen abspielen. RRS feed

  • Frage

  • Hallo,

    Ich versuche gerade, eine WPF Anwendung zu erstellen, die per Interop eine ppt in der Präsentationsansicht öffnen kann und per Klick auf einen Button die Folien weiterschaltet.

    Das funktioniert soweit auch ganz gut, allerdings funktionieren Klick-Animationen nicht, diese werden nicht abgespielt. Wenn ich bei solchen Folien zweimal meinen Button drücke, kommt einfach die nächste Folie.

    Mein Code sieht folgendermassen aus:

    Microsoft.Office.Interop.PowerPoint.Application oPPT;
    Microsoft.Office.Interop.PowerPoint.Presentations objPresSet;
    Microsoft.Office.Interop.PowerPoint.Presentation objPres;
    Microsoft.Office.Interop.PowerPoint.SlideShowView oSlideShowView;
    Timer slidetest;

    private void OpenPPT(object sender, RoutedEventArgs e)
    {
        //Create an instance of PowerPoint.
        oPPT = new Microsoft.Office.Interop.PowerPoint.Application();
        // Show PowerPoint to the user.
        oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
        objPresSet = oPPT.Presentations;


        OpenFileDialog Opendlg = new OpenFileDialog();

        Opendlg.Filter = "Powerpoint|*.ppt;*.pptx|All files|*.*";

        // Open file when user  click "Open" button 
        if (Opendlg.ShowDialog() == true)
        {
            string pptFilePath = Opendlg.FileName;
            //open the presentation
            objPres = objPresSet.Open(pptFilePath, MsoTriState.msoFalse,
            MsoTriState.msoTrue, MsoTriState.msoTrue);

            objPres.SlideShowSettings.ShowPresenterView = MsoTriState.msoFalse;
            System.Diagnostics.Debug.WriteLine(objPres.SlideShowSettings.ShowWithAnimation);
            objPres.SlideShowSettings.Run();

            oSlideShowView = objPres.SlideShowWindow.View;

     

        }
    }

    void slidetest_Elapsed(object sender, ElapsedEventArgs e)
    {
        // this works as expected
        oSlideShowView.Next();
    }

    private void OnNextClicked(object sender, RoutedEventArgs e)
    {
        // this doesn't work, animations aren't shown at all.
        oSlideShowView.Next();
    }

    Wenn ich direkt nach dem Aufruf auf objPres.SlideShowSettings.Run() einen Timer starte

            slidetest = new Timer(4000);
            slidetest.AutoReset = false;
            slidetest.Elapsed += new ElapsedEventHandler(slidetest_Elapsed);
            slidetest.Start();

    Wird die Animation auf meiner ersten Slide problemlos dargestellt.
    Ein Bespielprojekt mit vollständigem Code und einem pptx habe ich hier hochgeladen:
    https://skydrive.live.com/redir.aspx?cid=edd93823761d5c8e&resid=EDD93823761D5C8E!10340&parid=EDD93823761D5C8E!139&authkey=!AMpcxEYSf90vv24

    Ich verwende Powerpoint 2010 und die 2010er Interop Assemblies (Office14).

    Ist das vielleicht ein Threading-Problem? Ich habe schon verschiedene Dinge ausprobiert, komme aber einfach nicht drauf, was ich falsch mache.

    Mittwoch, 7. Dezember 2011 12:24

Antworten

  • Hallo Rainer,
    Ich möchte mich erst mal bedanken für Deine Mühe, dass Du uns ein Testprojekt bereitgestellt hast. Ich habe es runtergeladen und konnte sofort das Problem nachstellen J
    Ich habe der Workaround gefunden, dass ich der SlideShowWindow erst aktiviere und dann Next Befehl rausschicke:
            private void OnNextClicked(object sender, RoutedEventArgs e)
            {
                oSlideShowView.Application.SlideShowWindows[1].Activate();
                oSlideShowView.Next();
            }
    
    

     
    Viele Grüße,
    Bogdan

    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    • Als Antwort markiert Malyngo Freitag, 9. Dezember 2011 16:06
    Donnerstag, 8. Dezember 2011 13:50

Alle Antworten

  • Hallo Rainer,
    Ich möchte mich erst mal bedanken für Deine Mühe, dass Du uns ein Testprojekt bereitgestellt hast. Ich habe es runtergeladen und konnte sofort das Problem nachstellen J
    Ich habe der Workaround gefunden, dass ich der SlideShowWindow erst aktiviere und dann Next Befehl rausschicke:
            private void OnNextClicked(object sender, RoutedEventArgs e)
            {
                oSlideShowView.Application.SlideShowWindows[1].Activate();
                oSlideShowView.Next();
            }
    
    

     
    Viele Grüße,
    Bogdan

    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    • Als Antwort markiert Malyngo Freitag, 9. Dezember 2011 16:06
    Donnerstag, 8. Dezember 2011 13:50
  • Vielen Dank, das löst mein Problem! :)
    Freitag, 9. Dezember 2011 16:19