C#怎么读取Word文档内容_C#如何使用OpenXML解析【干货】

风静君_3959

风静君_3959

2026-03-21

506人浏览

原创

documentformat.openxml 是读取 .docx 文件正文文本最轻量、无需 word 进程的方案,需正确遍历 paragraph→run→text 节点以避免格式干扰和内容遗漏。

c#怎么读取word文档内容_c#如何使用openxml解析【干货】

DocumentFormat.OpenXml 读取 .docx 文件正文文本

OpenXML 是读取 .docx(不是 .doc)最轻量、无需 Word 进程的方案。它直接解析 ZIP 结构里的 XML,速度快、无依赖,但只支持 Office 2007+ 的格式。

常见错误是误以为能打开双击就报错的文件——其实那大概率是 .doc(OLE 复合文档),WordprocessingDocument 会直接抛 FileFormatException

  • 确认后缀是 .docx,且不是另存为时勾选了“兼容模式”(那可能仍是 .doc)
  • 引用 NuGet 包:DocumentFormat.OpenXml(v2.19+ 支持 .NET 6/7/8)
  • 核心流程:用 WordprocessingDocument.Open() 打开 → 取 MainDocumentPart → 遍历 Body 下所有 Paragraph → 拼接 Text 节点内容
  • 注意:表格、文本框、页眉页脚里的文字默认不包含在 Body 中,需单独处理 HeaderPart/FooterPart/Table
using (var doc = WordprocessingDocument.Open(@"C:\test.docx", false))
{
    var body = doc.MainDocumentPart.Document.Body;
    var text = string.Join("\n", 
        body.Elements<paragraph>()
             .Select(p => p.InnerText.Trim())
             .Where(t => !string.IsNullOrEmpty(t)));
}</paragraph>

InnerTextText 节点的区别与取值陷阱

InnerText 看起来省事,但它会把注释、删除线、高亮等格式标记全吞掉,还可能把换行符变成空格;而只遍历 Text 元素又容易漏掉加粗/斜体里的文字——因为它们被包在 Run 里,Text 只是 Run 的子节点。

真正稳定的做法是递归提取所有 Text 节点,跳过 CommentRangeStartDeletedText 等非正文内容。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载
  • 别用 Paragraph.InnerText 做生产环境文本抽取,尤其当文档含修订痕迹或样式复杂时
  • 正确路径:遍历每个 Paragraph → 遍历其下所有 Run → 取每个 Run 内第一个 Text 节点(run.Elements<text>().FirstOrDefault()?.Text</text>
  • 如果需要保留段落间换行,用 \r\n 分隔 Paragraph,而不是依赖 InnerText 自带的换行逻辑

读取表格和标题样式(Heading1 等)要额外处理

OpenXML 不像 Word UI 那样有“标题”概念,Heading1 实际是段落上的 ParagraphProperties 里一个 OutlineLevel 或命名样式引用。表格更是完全独立的结构树,不在 Body 的线性流里。

这意味着:只扫 Paragraph 会漏掉全部表格内容,也识别不出哪些段落是标题。

  • 查标题:检查 Paragraph.ParagraphProperties?.ParagraphStyleId?.Val.Value 是否等于 "Heading1"(实际值取决于模板,可用 StylesPart 查映射)
  • 读表格:遍历 Body.Elements<table>(),再对每张表遍历 <code>TableRowTableCellParagraphText
  • 性能提醒:嵌套深的表格 + 大量样式定义会让 DOM 遍历变慢,避免在循环里反复调用 StylesPart 查样式名
  • 为什么不用 Microsoft.Office.Interop.Word

    Interop 看似简单——调 Application.Documents.Open() 然后读 Document.Content.Text。但它会在后台启动完整 Word 进程,Windows Server 上常因 DCOM 权限失败,Linux/macOS 根本跑不了,而且并发高时极易卡死或内存泄漏。

    OpenXML 没这些问题,但代价是:你得自己处理 XML 结构细节。比如超链接是 Hyperlink 节点,页码是 SimpleField,这些都不会出现在 Text 节点里。

    • Interop 适合本地工具类小脚本(且确定只在 Win+桌面版 Office 环境运行)
    • OpenXML 是服务器、CI、跨平台场景唯一靠谱选择
    • 真要兼顾 .doc 和 .docx?别硬扛,用 LibreOffice headless 转成 .docx 再交给 OpenXML —— 比写两套解析逻辑省心
    OpenXML 解析的复杂点不在 API 调用,而在 Word 文档本身结构的任意性:一个空格可能藏在 Run 里,一段标题可能由多个 Text 拼成,表格单元格里还能嵌套整个文档。别指望“读一次就全出来”,得按需分层提取。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c#

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c#是什么意思
c#是什么意思

C#是一种通用的面向对象编程语言,它在.NET框架上运行,可用于开发各种类型的应用程序。本专题为大家提供c#相关的各种文章、以及下载和课程。

2023.08.08

832

5

什么是c#
什么是c#

C#(读作C Sharp)是一种现代的、通用的、面向对象的编程语言。它由微软公司开发,于2000年首次发布,主要用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是一种类型安全和托管的编程语言,它结合了C++的强大性能和C语言的简单易学特点,并引入了许多新的特性和概念,如委托、属性、泛型和异步编程等,以提高开发效率和代码可维护性。

2023.08.31

2191

3

C#中base关键字的用法
C#中base关键字的用法

在C#中,base关键字用于访问当前类的基类成员,这包括基类的字段、属性、方法、构造函数、索引器以及事件。想了解更多C#的相关内容,可以阅读本专题下面的文章。

2024.03.13

785

8

C#Task用法
C#Task用法

Task在C#中是用于表示异步操作的对象,它位于System.Threading.Tasks命名空间中。想了解更多C#中各种用法的相关内容,可以阅读本专题下面的文章。

2024.03.14

2555

11

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

2026.02.03

252

18

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

2026.02.06

329

20

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

2026.03.11

591

24

C# Unity游戏开发与ECS架构实践
C# Unity游戏开发与ECS架构实践

本专题聚焦 C# 在 Unity 游戏开发中的应用,系统讲解 ECS(Entity-Component-System)架构设计、游戏对象管理、性能优化与内存控制策略。通过实际游戏案例,帮助开发者构建高性能、结构清晰的游戏系统,提高游戏开发效率与运行性能。

2026.04.13

289

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Valgrind Quick Start Guide
Valgrind Quick Start Guide

共0课时 | 0人学习

CLion CMake 快速入门教程
CLion CMake 快速入门教程

共0课时 | 0人学习