当前位置:
首页 > Python基础教程 >
-
C#教程之C# 批量删除Word超链接
对于Word文档中包含较多的超链接,如果一个个来删除很花费时间和精力,本篇文章将提供一种可用于批量删除Word中的超链接的方法。这里的超链接可以是页眉页脚处的超链接、正文中的超链接、表格中的超链接、文字超链接、图片超链接等等。下面将具体演示如何来进行代码操作。
所需工具
- Free Spire.Doc for .NET 6.3 (免费版)
PS:下载安装后,注意在项目程序中添加引用Spire.Doc.dll,dll文件可在安装路径下的Bin文件夹中获取。
测试文档中的超链接情况,如下图:
C# 代码示例(供参考)
步骤 1 :添加using指令
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using Spire.Doc.Formatting; using System.Drawing;
步骤 2 :加载文件
Document document = new Document(); document.LoadFromFile("sample.docx");
步骤 3 :遍历文档,删除超链接
foreach (Section section in document.Sections) { //删除正文里的超链接 foreach (DocumentObject obj in section.Body.ChildObjects) { RemoveLinks(obj, document); } //删除页眉页脚中的超链接 foreach (HeaderFooter hf in section.HeadersFooters) { foreach (DocumentObject hfobj in hf.ChildObjects) { RemoveLinks(hfobj, document); } } }
ps: 这里需要自定义两个方法来分别删除段落中的文字超链接和删除段落中的图片超链接
自定义方法1:
private static void RemoveLinks(DocumentObject obj,Document document) { //删除段落中的超链接 RemoveLinksInPara(obj,document); //删除表格中的超链接 if (obj.DocumentObjectType == DocumentObjectType.Table) { foreach (TableRow row in (obj as Table).Rows) { foreach (TableCell cell in row.Cells) { foreach (DocumentObject cobj in cell.ChildObjects) { RemoveLinksInPara(cobj,document); } } } } }
自定义方法2:
private static void RemoveLinksInPara(DocumentObject obj,Document document) { //遍历文档段落中所有子对象 if (obj.DocumentObjectType == DocumentObjectType.Paragraph) { var objs = (obj as Paragraph).ChildObjects; for (int i = 0; i < objs.Count; i++) { if (objs[i].DocumentObjectType == DocumentObjectType.Field) { //获取超链接域 Field field = objs[i] as Field; if (field.Type == FieldType.FieldHyperlink) { //获取超链的文本或图片对象 DocumentObject dObj = field.NextSibling.NextSibling as DocumentObject; //删除文本超链接,保留文本和样式 if (dObj is TextRange) { //获取超链接文本样式 CharacterFormat format = (dObj as TextRange).CharacterFormat; format.UnderlineStyle = UnderlineStyle.None; format.TextColor = Color.Black; //创建TextRange并把超链接的文本赋给它 TextRange tr = new TextRange(document); tr.Text = field.FieldText; //应用样式 tr.ApplyCharacterFormat(format); //删除文本超链接域 objs.RemoveAt(i); //重新插入文本 objs.Insert(i, tr); } //删除图片超链接,保留图片 if (dObj is DocPicture) { //删除图片超链接域 objs.RemoveAt(i); //重新插入图片 objs.Insert(i, dObj); } } } } } }
步骤 4 :保存文档
document.SaveToFile("RemoveLinks.docx", FileFormat.Docx); System.Diagnostics.Process.Start("RemoveLinks.docx");
调试运行程序,生成文档(如下图)。生成的文档中,原有的超链接将全部被删除。
全部代码:
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using Spire.Doc.Formatting; using System.Drawing; namespace RemoveHyperlink_Doc { class Program { static void Main(string[] args) { //创建Word对象并加载文档 Document document = new Document(); document.LoadFromFile("sample.docx"); foreach (Section section in document.Sections) { //删除正文里的超链接 foreach (DocumentObject obj in section.Body.ChildObjects) { RemoveLinks(obj, document); } //删除页眉页脚中的超链接 foreach (HeaderFooter hf in section.HeadersFooters) { foreach (DocumentObject hfobj in hf.ChildObjects) { RemoveLinks(hfobj, document); } } } //保存文档 document.SaveToFile("RemoveLinks.docx", FileFormat.Docx); System.Diagnostics.Process.Start("RemoveLinks.docx"); } private static void RemoveLinks(DocumentObject obj,Document document) { //删除段落中的超链接 RemoveLinksInPara(obj,document); //删除表格中的超链接 if (obj.DocumentObjectType == DocumentObjectType.Table) { foreach (TableRow row in (obj as Table).Rows) { foreach (TableCell cell in row.Cells) { foreach (DocumentObject cobj in cell.ChildObjects) { RemoveLinksInPara(cobj,document); } } } } } private static void RemoveLinksInPara(DocumentObject obj,Document document) { //遍历文档段落中所有子对象 if (obj.DocumentObjectType == DocumentObjectType.Paragraph) { var objs = (obj as Paragraph).ChildObjects; for (int i = 0; i < objs.Count; i++) { if (objs[i].DocumentObjectType == DocumentObjectType.Field) { //获取超链接域 Field field = objs[i] as Field; if (field.Type == FieldType.FieldHyperlink) { //获取超链的文本或图片对象 DocumentObject dObj = field.NextSibling.NextSibling as DocumentObject; //删除文本超链接,保留文本和样式 if (dObj is TextRange) { //获取超链接文本样式 CharacterFormat format = (dObj as TextRange).CharacterFormat; format.UnderlineStyle = UnderlineStyle.None; format.TextColor = Color.Black; //创建TextRange并把超链接的文本赋给它 TextRange tr = new TextRange(document); tr.Text = field.FieldText; //应用样式 tr.ApplyCharacterFormat(format); //删除文本超链接域 objs.RemoveAt(i); //重新插入文本 objs.Insert(i, tr); } //删除图片超链接,保留图片 if (dObj is DocPicture) { //删除图片超链接域 objs.RemoveAt(i); //重新插入图片 objs.Insert(i, dObj); } } } } } } } }
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式