从 Word 文档中提取文本通常在不同的场景中执行。例如,分析文本,提取文档的特定部分并将它们组合成单个文档,等等。在本文中,您将学习如何使用 C# 以编程方式从 Word 文档中提取文本。此外,我们将介绍如何动态提取段落、表格等特定元素之间的内容。

Aspose.Words for .NET 最新下载https://www.evget.com/product/564/download

提示:您可能需要检查 Aspose PowerPoint to Word Converter,因为它演示了流行的演示文稿到 Word 文档的转换过程。

从 Word 文档中提取文本的 C# 库

Aspose.Words for .NET是一个功能强大的库,可让您从头开始创建 MS Word 文档。此外,它可以让您操作现有的 Word 文档进行加密、转换、文本提取等。我们将使用这个库从 Word DOCX 或 DOC 文档中提取文本。您可以 下载 API 的 DLL 或  使用包管理器控制台直接从NuGet安装它。

PM> Install-Package Aspose.Words

使用 C# 在 Word 文档中提取文本

MS Word 文档由各种元素组成,包括段落、表格、图像等。因此,文本提取的要求可能因一种情况而异。例如,您可能需要在段落、书签、评论等之间提取文本。

Word 文档中的每种类型的元素都表示为一个节点。因此,要处理文档,您将不得不使用节点。那么让我们开始看看如何在不同的场景下从 Word 文档中提取文本。

在 C# 中从 Word 文档中提取文本

在本节中,我们将为 Word 文档实现一个 C# 文本提取器,文本提取的工作流程如下:

  • 首先,我们将定义要包含在文本提取过程中的节点。
  • 然后,我们将提取指定节点之间的内容(包括或不包括开始和结束节点)。
  • 最后,我们将使用提取节点的克隆,例如创建一个包含提取内容的新 Word 文档。

现在让我们编写一个名为ExtractContent的方法,我们将向该方法传递节点和一些其他参数来执行文本提取。此方法将解析文档并克隆节点。以下是我们将传递给此方法的参数。

  1. StartNode 和 EndNode 分别作为内容提取的起点和终点。这些可以是块级(Paragraph  、  Table)或内联级(例如 Run、  FieldStart、  BookmarkStart 等)节点。

    1. 要传递一个字段,您应该传递相应的 FieldStart 对象。
    2. 要传递书签,  应传递BookmarkStart 和 BookmarkEnd节点。
    3. 对于评论,  应使用CommentRangeStart 和 CommentRangeEnd节点。
  2. IsInclusive定义标记是否包含在提取中。如果此选项设置为 false 并且传递相同的节点或连续节点,则将返回一个空列表。

以下是提取传递的节点之间的内容的ExtractContent方法的完整实现.

现在我们准备好使用这些方法并从 Word 文档中提取文本。

在 Word 文档中的段落之间提取文本

让我们看看如何在 Word DOCX 文档的两个段落之间提取内容。以下是在 C# 中执行此操作的步骤。

  • 首先,使用Document类加载 Word 文档。
  • 使用Document.FirstSection.Body.GetChild(NodeType.PARAGRAPH, int, boolean)方法将开始和结束段落的引用获取到两个对象中。
  • 调用ExtractContent(startPara, endPara, True)方法将节点提取到对象中。
  • 调用GenerateDocument(Document, extractNodes)辅助方法来创建包含提取内容的文档。
  • 最后,使用Document.Save(string)方法保存返回的文档。

以下代码示例展示了如何在 C# 中提取 Word 文档中第 7 段和第 11 段之间的文本。

// Load Word document
Document doc = new Document("document.docx");// Gather the nodes (the GetChild method uses 0-based index)
Paragraph startPara = (Paragraph)doc.FirstSection.Body.GetChild(NodeType.Paragraph, 6, true);
Paragraph endPara = (Paragraph)doc.FirstSection.Body.GetChild(NodeType.Paragraph, 10, true);// Extract the content between these nodes in the document. Include these markers in the extraction.
ArrayList extractedNodes = ExtractContent(startPara, endPara, true);// Insert the content into a new document and save it to disk.
Document dstDoc = GenerateDocument(doc, extractedNodes);
dstDoc.Save("output.docx");

在 Word 文档中不同类型的节点之间提取文本

您还可以在不同类型的节点之间提取内容。为了演示,让我们提取段落和表格之间的内容并将其保存到新的 Word 文档中。以下是执行此操作的步骤。

  • 使用Document类加载 Word 文档。
  • 使用Document.FirstSection.Body.GetChild(NodeType, int, boolean)方法将起始节点和结束节点引用到两个对象中。
  • 调用ExtractContent(startPara, endPara, True)方法将节点提取到对象中。
  • 调用GenerateDocument(Document, extractNodes)辅助方法来创建包含提取内容的文档。
  • 使用Document.Save(string)方法保存返回的文档。

以下代码示例演示如何在 C# 中提取段落和表格之间的文本。

// Load Word document
Document doc = new Document("document.docx");Paragraph startPara = (Paragraph)doc.LastSection.GetChild(NodeType.Paragraph, 2, true);
Table endTable = (Table)doc.LastSection.GetChild(NodeType.Table, 0, true);// Extract the content between these nodes in the document. Include these markers in the extraction.
ArrayList extractedNodes = ExtractContent(startPara, endTable, true);// Insert the content into a new document and save it to disk.
Document dstDoc = GenerateDocument(doc, extractedNodes);
dstDoc.Save("output.docx");

根据样式提取段落之间的文本

现在让我们看看如何根据样式提取段落之间的内容。为了演示,我们将提取 Word 文档中第一个“标题 1”和第一个“标题 3”之间的内容。以下步骤演示了如何在 C# 中实现此目的。

  • 首先,使用Document类加载 Word 文档。
  • 然后,使用ParagraphsByStyleName(Document, “Heading 1”)辅助方法将段落提取到对象中。
  • 使用ParagraphsByStyleName(Document, “Heading 3”)辅助方法将段落提取到另一个对象中。
  • 调用ExtractContent(startPara, endPara, True)方法并将两个段落数组中的第一个元素作为第一个和第二个参数传递。
  • 调用GenerateDocument(Document, extractNodes)辅助方法来创建包含提取内容的文档。
  • 最后,使用Document.Save(string)方法保存返回的文档。

以下代码示例展示了如何根据样式提取段落之间的内容。

// Load Word document
Document doc = new Document("document.docx");// Gather a list of the paragraphs using the respective heading styles.
List<Paragraph> parasStyleHeading1 = ParagraphsByStyleName(doc, "Heading 1");
List<Paragraph> parasStyleHeading3 = ParagraphsByStyleName(doc, "Heading 3");// Use the first instance of the paragraphs with those styles.
Node startPara1 = (Node)parasStyleHeading1[0];
Node endPara1 = (Node)parasStyleHeading3[0];// Extract the content between these nodes in the document. Don't include these markers in the extraction.
ArrayList extractedNodes = ExtractContent(startPara1, endPara1, false);// Insert the content into a new document and save it to disk.
Document dstDoc = GenerateDocument(doc, extractedNodes);
dstDoc.Save("output.docx");

结论

在本文中,您学习了如何使用 C# 从 MS Word 文档中提取文本。此外,您还了解了如何以编程方式在 Word 文档中相似或不同类型的节点之间提取内容。因此,您可以在 C# 中构建自己的 MS Word 文本提取器。此外,您可以使用文档探索 Aspose.Words for .NET 的其他功能 。如果您有任何问题,请随时告诉我们。

Word处理控件Aspose.Words功能演示:在 C# 中从 Word 文档中提取文本相关推荐

  1. Word处理控件Aspose.Words功能演示:使用 C# 在 Word 文档中创建和修改 VBA 宏

    Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word.此 ...

  2. Word处理控件Aspose.Words功能演示:用Java从Word文档中提取文本

    Aspose.Words For .NET是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsof ...

  3. Word处理控件Aspose.Words功能演示:在 Python 中将 Word DOCX 或 DOC 转换为 PDF

    Word 到PDF是最流行和执行最广泛的文档转换之一.DOCX或DOC文件在打印或共享之前会转换为 PDF 格式.在本文中,我们将在 Python 中自动将 Word 转换为 PDF.步骤和代码示例将 ...

  4. Word处理控件Aspose.Words功能演示:在Java中将Word文档以邮件形式发送

    在大多数情况下,电子邮件按照特定模板以格式正确的布局发送.但是,各种电子邮件编辑器不提供增强的格式选项.在这种情况下,可以在Word文档中创建一条消息,并将其用作电子邮件正文.在本文中,将学习如何使用 ...

  5. Word处理控件Aspose.Words功能演示:在 Java 中将 Word DOC/DOCX 转换为 PDF

    Aspose.Words是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word. A ...

  6. Word处理控件Aspose.Words功能演示:使用 Java 为 Word 文档添加水印

    为防止非法使用.定义所有权.显示文档状态等多种目的,在 Word 文档中添加水印.在本文中,您将学习如何使用 Java 为 Word 文档添加水印.文章将分别演示如何将文字和图片水印插入到Word文档 ...

  7. Word处理控件Aspose.Words功能演示:在 Python 中将 Word 文档转换为 PNG、JPEG 或 BMP

    MS Word 文件到图像格式的转换让您可以将文档的页面嵌入到您的 Web 或桌面应用程序中.为了在 Python 应用程序中执行此转换,本文介绍了如何使用 Python 将 Word DOCX或DO ...

  8. Word处理控件Aspose.Words功能演示:使用 Java 在 Word 中添加或更新目录

    Word 文档中的目录(TOC) 为您提供了文档内容的概述.此外,它还允许导航到文档的特定部分.在本文中,将学习如何以编程方式处理 Word 文档中的目录.特别地,本文介绍了如何使用 Java 在 W ...

  9. Word处理控件Aspose.Words功能演示:使用C#在电子邮件正文中发送Word文档

    电子邮件正文的呈现是吸引读者的重要因素之一.因此,电子邮件使用标题,子标题,表格,图像等进行了很好的格式化.但是,大多数内置的电子邮件编辑器不提供高级格式化选项.为了解决此限制,本文介绍如何使用Wor ...

  10. Word处理控件Aspose.Words功能演示:使用 Python 将 Word 文档的内容复制到另一个文档

    在各种情况下,您可能需要将 Word 文档的内容复制到另一个文档中.此外,您可能需要创建原始 Word 文档的克隆.为了自动化这些操作,本文介绍了如何在 Python 中将内容从一个 Word 文档复 ...

最新文章

  1. 用for实现Go的while和do...while
  2. 从aspx后台页面向浏览器输出js文件
  3. 什么是句柄?为什么会有句柄?HANDLE
  4. 3D数学——Unity中的向量运算
  5. 华为NP课程笔记11-STP+RSTP
  6. 基于uniapp开发DiscuzQ社区的ios和安卓、小程序H5源码
  7. Raid5数据恢复原理_两块盘离线数据恢复方法
  8. 边读边捋【july的】海量数据处理面试题
  9. 常见的注册表修改大全
  10. ARMv7 Processor modes
  11. 【Java设计模式 规范与重构】 三 大型重构的手段:高内聚,低耦合
  12. 立创EDA安装ibom插件
  13. MDN Web Docs
  14. unity3d鸿蒙系统支持,Unity3D之处理角色控制器实现上坡爬坡减速
  15. win10找不到打印机_WIN10打印机共享设置
  16. TableRow设置高度
  17. MySQL性能调优必知:Performance Schema引擎的配置与使用
  18. 武汉长江大桥(游走武汉)
  19. react学习笔记 react-router-dom react-redux基础使用及手写基础源码 组件反射 react原理
  20. 关于Linux常用系统性能监控命令(转自微信公众号: linux爱好者)

热门文章

  1. python调用通达信公式_000638_python通达信指标
  2. 多目标优化算法:多目标水母搜索算法MOJS(提供MATLAB代码)
  3. PAT | 1011 A+B 和 C(分数 15)
  4. 论文|RecSys17-序列推荐模型 Translation-based Recommendation
  5. Revit中管道连接问题和“一键管线连接”
  6. linux微软蓝牙鼠标搜不到,微软蓝牙4.0鼠标对wifi影响到底有多严重
  7. dof景深matlab,15-DOF(景深)
  8. html 什么标签不换行,css不换行代码是什么?
  9. linux能虚拟化windows,虚拟机程序将轻量虚拟化带入Linux与Windows
  10. 053可视化编程节点拖拽交互处理方案一:Dom节点插入