在 2013 微软开源了 OpenXml 解析库,在微软的 PPTX 文档,使用的文档格式就是国际规范的 OpenXml 格式。这个格式有很多版本,详细请看百度。因为演示文稿使用的是 OpenXml 在 .NET 开发可以非常简单将 PowerPoint 文档进行解析,大概只需要两句话

解析 PPT 文件不等于显示 PPT 文件,只是可以拿到 PPT 里面的数据

第一步是通过 NuGet 安装 OpenXml 库,这个库支持跨平台,因为只是解析数据

第二步就是传入 PPT 文件解析

            using (var presentationDocument = DocumentFormat.OpenXml.Packaging.PresentationDocument.Open("测试.pptx", false))

这样就完成了 PPT 文件的解析,在调试添加断点,可以在局部变量看到 presentationDocument 的内容

这里面的内容就是整个 PPT 的数据,至于这些数据的含义是什么,就需要额外阅读一下文档

下面是一个简单的例子,获取 PPT 文件里面每一页的所有文本

            using (var presentationDocument = DocumentFormat.OpenXml.Packaging.PresentationDocument.Open("测试.pptx", false))
            {
                var presentationPart = presentationDocument.PresentationPart;
                var presentation = presentationPart.Presentation;

                // 先获取页面
                var slideIdList = presentation.SlideIdList;

                foreach (var slideId in slideIdList.ChildElements.OfType<SlideId>())
                {
                    // 获取页面内容
                    SlidePart slidePart = (SlidePart) presentationPart.GetPartById(slideId.RelationshipId);

                    var slide = slidePart.Slide;

                    foreach (var paragraph in
                        slidePart.Slide
                            .Descendants<DocumentFormat.OpenXml.Drawing.Paragraph>())
                    {
                        // 获取段落
                        // 在 PPT 文本是放在形状里面
                        foreach (var text in
                            paragraph.Descendants<DocumentFormat.OpenXml.Drawing.Text>())
                        {
                            // 获取段落文本,这样不会添加文本格式
                            Debug.WriteLine(text.Text);
                        }
                    }
                }
            }

代码放在 github 欢迎小伙伴访问

OfficeDev/Open-XML-SDK: Open XML SDK by Microsoft

Openxml学习 - 标签 - FrankZC - 博客园

Open Xml SDK 引文

官方文档 欢迎使用 Open XML SDK 2.5 for Office

其他语言的解析

scanny/python-pptx: Create Open XML PowerPoint documents in Python

更多请看 Office 使用 OpenXML SDK 解析文档博客目录


本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/C-dotnet-%E4%BD%BF%E7%94%A8-OpenXml-%E8%A7%A3%E6%9E%90-PPT-%E6%96%87%E4%BB%B6.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 lindexi (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系