在C#中将PowerPoint幻灯片导出为文件

7

一些Powerpoint演示文稿包含嵌入的电影。 如何使用C#(VSTO或Oficce COM Api)从演示文稿中导出电影(或获取电影文件路径)?


由于影片已嵌入,因此没有路径可供访问。它们是PPTX文件的一部分。您可以通过解压缩PPTX文件来获取其中嵌入的媒体(影片和声音)。深入浏览解压缩文件的文件夹结构,会发现一个名为“media”的文件夹,里面将包含声音/影片。但是,它们不会具有原始文件名,而是以“Media1.mov”等名称命名。 - Steve Rindsberg
3个回答

6
这里有一个简单的演示来完成这个操作:

不要忘记添加对PowerPoint COM API的引用(Microsoft PowerPoint 12.0 Object Library)。

using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Office = Microsoft.Office.Core;

然后你可以像这样获取电影路径。
    private void button1_Click(object sender, EventArgs e)
    {
        PowerPoint.Application app = new PowerPoint.Application();
        app.Visible = Office.MsoTriState.msoTrue;
        //open powerpoint file in your hard drive
        app.Presentations.Open(@"e:\my tests\hello world.pptx");

        foreach (PowerPoint.Slide slide in app.ActivePresentation.Slides)
        {
            PowerPoint.Shapes slideShapes = slide.Shapes;
            foreach (PowerPoint.Shape shape in slideShapes)
            {
                if (shape.Type == Office.MsoShapeType.msoMedia &&
                    shape.MediaType == PowerPoint.PpMediaType.ppMediaTypeMovie)
                {
                    //LinkFormat.SourceFullName contains the movie path 
                    //get the path like this
                    listBox1.Items.Add(shape.LinkFormat.SourceFullName);
                    //or use System.IO.File.Copy(shape.LinkFormat.SourceFullName, SOME_DESTINATION) to export them
                }
            }
        }
    }

我希望这可以帮到您。 [编辑:] 关于Steve的评论,如果您只需要嵌入的电影,您只需要像解压任何其他zip文件一样解压.pptx文件(例如使用DotNetZip),并在此路径中查找嵌入的视频([PowerPoint_fileName]\ppt\media)。

2
很遗憾,这不行。原始问题指定了视频是嵌入式的。这个例子将提供链接(但不是嵌入式)视频的路径。 - Steve Rindsberg
我认为他在这个问题中指的是链接视频,因为获取嵌入式视频甚至更容易,而且不需要使用Office COM API,只需像处理其他任何zip文件一样解压.pptx文件(例如使用DotNetZip),然后在此路径中查找嵌入式视频([PowerPointfileName] \ ppt \ media)。 - Issam Ali
是的,我在原文的评论中提到了解压缩文件的技巧,但你做得更好,提供了zip文件中的实际路径。谢谢! - Steve Rindsberg

4

1

第一个示例中的链接已损坏。 - Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接