OpenXML-SDK 操作Word,PPT,提取文字

今天跟大家分享一款插件,OpenXML-SDK 实现对Word,PPT的操作。

今天仅介绍如何利用这个组件,从文件中提取文字。

OpenXML-SDK有个缺陷,不支持跨平台,即只能部署在windows系统

首先、nuget上引用包

 

 然后,上代码,从PPT中提取文字,返回一个数组,及一段段的文字。

using DocumentFormat.OpenXml.Drawing;
using DocumentFormat.OpenXml.Packaging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using A = DocumentFormat.OpenXml.Drawing;
namespace ConsoleApp1.PPT
{
    /// <summary>
    /// openxml 仅支持在window下运行,需要引用Open-XML-SDK 2.9.1版本
    /// </summary>
    public class OpenXMLPPT
    {
        /// <summary>
        /// 提取ppt,返回字符串数组,一行一个字符创
        /// </summary>
        public  List<string>  GetWordFromPPT(string filename)
        {
            
           List<string> words = new List<string>();
            // 打开PPTX文件
            using (PresentationDocument ppt = PresentationDocument.Open(filename, false))
            {
                // 遍历每个Slide
                foreach (SlidePart slidePart in ppt.PresentationPart.SlideParts)
                {
                    // 遍历每个Paragraph
                    foreach (var paragraph in slidePart.Slide.Descendants<Paragraph>())
                    {
                        // 遍历每个Run
                        foreach (var run in paragraph.Descendants<A.Text>())
                        {
                            // 打印文本内容
                            words.Add(run.Text);
                        }
                    }
                }
            }
            return words;
        }
    }
}

 

下面是操作word的示例:

using System;
using System.IO;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
namespace ConsoleApp1.Word
{
    /// <summary>
    /// openxml 仅支持在window下运行,需要引用Open-XML-SDK 2.9.1版本
    /// </summary>
    public class OpenXMLWord
    {
        /// <summary>
        /// 从doc文档中提取
        /// </summary>
        public  List<string> GetWordFromWord(string filename)
        {
            List<string> words = new List<string>();
            // 打开Word文档
            using (WordprocessingDocument word = WordprocessingDocument.Open(filename, false))
            {
                // 遍历每个Paragraph
                foreach (var paragraph in word.MainDocumentPart.Document.Descendants<Paragraph>())
                {
                    // 遍历每个Run
                    foreach (var run in paragraph.Descendants<Run>())
                    {
                        // 遍历每个Text
                        foreach (var text in run.Descendants<Text>())
                        {
                            // 打印文本内容
                            words.Add(text.Text);
                        }
                    }
                }
            }
            return words;
        }
    }
}

 

===================================

更多分享,请大家关注我的个人公众号:

posted @ 2023-03-21 14:34  黄明辉  阅读(377)  评论(0编辑  收藏  举报