惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
T
The Blog of Author Tim Ferriss
量子位
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky
小众软件
小众软件
Recent Announcements
Recent Announcements
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
InfoQ
美团技术团队
G
Google Developers Blog
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog
博客园 - 聂微东
Last Week in AI
Last Week in AI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Help Net Security

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12)
C# 解析 Word 超链接:字段识别、屏幕提示读取
LAYONTHEGROUND · 2026-06-23 · via 博客园_首页

在文档批量处理、内容审计、数据抽取等开发场景中,经常需要从 Word 文档中提取所有超链接信息(包括链接地址、显示文本、链接类型等)。本文基于 Free Spire.Doc for .NET 免费组件,介绍一种轻量、代码量少的实现方式,重点讲解核心逻辑与代码实现,供.NET开发者参考。

一、方案概述

在 Word 文档中,超链接以字段(Field) 的形式存储。每个超链接字段包含两个核心部分:

  • 显示文本(Anchor Text) :用户在文档中看到的可点击文字
  • URL 地址:超链接指向的目标地址

读取超链接的基本思路是: 1.加载 Word 文档 2. 遍历文档的所有节(Section)和段落(Paragraph) 3. 检查每个子对象是否为 Field 类型 4. 再进一步判断其 Type 是否为 FieldType.FieldHyperlink 5. 最后提取链接地址、显示文本

二、环境准备

1. 组件引入

通过 NuGet 包管理器安装 FreeSpire.Doc 包,或在程序包管理器控制台执行:

Install-Package FreeSpire.Doc

说明:该免费版本存在页面数量限制,适合小规模文档处理场景

2. 命名空间引用

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Collections.Generic;
using System.IO;
using System.Text;

三、完整代码示例

以下代码演示了如何读取 Word 文档中的所有超链接,提取其显示文本和 URL,并将结果保存到文本文件:

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace ExtractHyperlinks
{
class Program
{
static void Main(string[] args)
{
// 1. 创建 Document 实例并加载 Word 文档
Document doc = new Document();
doc.LoadFromFile(@"sample.docx");

// 2. 创建列表存储超链接
List<Field> hyperlinks = new List<Field>();

// 3. 遍历文档的所有节
foreach (Section section in doc.Sections)
{
// 遍历节中的所有子对象
foreach (DocumentObject secObj in section.Body.ChildObjects)
{
// 判断是否为段落
if (secObj.DocumentObjectType == DocumentObjectType.Paragraph)
{
Paragraph paragraph = secObj as Paragraph;

// 遍历段落中的所有子对象
foreach (DocumentObject paraObj in paragraph.ChildObjects)
{
// 判断是否为 Field 类型
if (paraObj.DocumentObjectType == DocumentObjectType.Field)
{
Field field = paraObj as Field;

// 判断是否为超链接字段
if (field.Type == FieldType.FieldHyperlink)
{
hyperlinks.Add(field);
}
}
}
}
}
}

// 4. 输出超链接信息
StringBuilder sb = new StringBuilder();
foreach (Field hyperlink in hyperlinks)
{
sb.AppendLine("显示文本:" + hyperlink.FieldText);
sb.AppendLine("URL地址:" + hyperlink.Code);
sb.AppendLine();
}

File.WriteAllText("Hyperlinks.txt", sb.ToString());

doc.Close();
}
}
}

四、进阶:提取屏幕提示(ScreenTip)

部分超链接还包含屏幕提示(鼠标悬停时显示的文本)。通过解析字段代码(Field Code)可以提取这一信息。

字段代码的典型格式如下:

超链接类型字段代码示例
标准超链接HYPERLINK "https://www.example.com"
带屏幕提示的超链接HYPERLINK "https://www.example.com" \o "ScreenTip"

提取屏幕提示的代码片段:

// 获取显示文本
string anchorText = field.FieldText;

// 获取完整字段代码
string fieldCode = field.GetFieldCode();

// 提取 URL(位于第一对引号中)
string url = fieldCode.Split('"')[1];

// 检查是否包含屏幕提示(\o 参数)
string screenTip = string.Empty;
if (fieldCode.Contains("\o"))
{
screenTip = fieldCode.Split('"')[3].Trim();
}

五、注意事项

  1. 文档格式兼容性:Free Spire.Doc for .NET 支持 .doc.docx 两种格式,代码无需针对不同格式做特殊处理。

  2. 嵌套结构:Word 文档的对象模型是层级结构(Document → Section → Paragraph → 子对象),遍历时需要逐层深入。

  3. 性能考虑:对于大型文档,遍历所有对象可能有一定开销。如有性能要求,可考虑在识别到超链接后提前终止遍历,或使用更精确的查找策略。

  4. 免费版限制:Free Spire.Doc 对文档处理功能有部分限制(如文档页数限制),但对于常规的超链接读取任务通常足够使用。

六、总结

通过以上示例,开发者可以用简洁的 C# 代码实现 Word 文档中超链接的批量读取。核心流程包括:加载文档 → 遍历节和段落 → 识别超链接字段 → 提取显示文本和 URL。这一方案无需安装 Microsoft Office,适合在服务器端或自动化流程中集成使用。对于需要进一步处理超链接的场景(如修改 URL 或显示文本),同样可以通过 Field.CodeField.FieldText 属性实现。