对于Word文档中包含较多的超链接,如果一个个来删除很花费时间和精力,本篇文章将提供一种可用于批量删除Word中的超链接的方法。这里的超链接可以是页眉页脚处的超链接、正文中的超链接、表格中的超链接、文字超链接、图片超链接等等。下面将具体演示如何来进行代码操作。

所需工具

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 = ; 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 = ; 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);
}
}
}
}
}
}
}
}

(本文完)

如需转载,请注明出处。

C# 批量删除Word超链接的更多相关文章

  1. 如何批量删除word文档中的超级链接?

    有时候从网页上copy来的文章中,会带有非常多的链接,这些链接很烦人是吧?如何批量删除(一次性全部删除)word文章中的超链接呢? 有些朋友说,Ctrl+A全选文章,然后点击格式工具栏上的“清除格式” ...

  2. Java 批量删除Word中的空白段落

    1. 测试文档.期望达到的目标文档效果 用于测试的Word文档如下所示,包含的空白段落影响文章整体布局及美观性: 目标文档效果: 2. 辅助工具 2.1 使用类库:Free Spire.Doc for ...

  3. 如何统一删除word中的超链接

    [摘要] 我们从别处拷贝文字,或从网上复制的文字,里面有很多超级链接,如何可以批量删除这些链接呢?这里介绍两种批量删除链接的方法. [正文] 方法一:使用快捷键删除超链接 有个神奇的快捷键,可以帮我们 ...

  4. 使用Word批量删除换行和空白行

    转载自:https://blog.csdn.net/dearmorning/article/details/78811137 问题一:从pdf文档中复制一部分内容到word的时候,pdf的自动换行会自 ...

  5. Word批量删除所有书签

    Word中的书签功能可快速.准确定位文档中特定的位置,经常用于模板定制.文档产出等. 可一直以来,书签功能存在一个不便的操作,即无法批量删除,只能单个删除,操作极不友好. 解决方案 我用代码暂时还改变 ...

  6. 代码批量生成WORD的遇到的问题及解决

    好久没搞工具了,最近因为处理大规模公文处理单文档,自己写了个批量处理WORD的程序:在调试过程中,主要遇到两个问题 第一个是WORD的模板 数据很多,但是WORD模板只需要一个,将数据替换WORD里标 ...

  7. 批量删除wps文档里的回车符的方法!WPS使用技巧分享!

    有时候整理文档的时候,如果是从网上复制的文字,可能会因为复制而产生很多的回车符.怎样能批量去掉这些个回车符呢,下面马上告诉你批量删除wps文档里的回车符的方法!WPS使用技巧分享! 想要批量删除批量删 ...

  8. C# 导出word文档及批量导出word文档(4)

          接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用 ...

  9. tp5 ajax批量删除(自写)

    html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

随机推荐

  1. 【技术分享】BurpSuite 代理设置的小技巧

    作者:三思之旅 预估稿费:300RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 在Web渗透测试过程中,BurpSuite是不可或缺的神器之一.BurpSuite的核心是 ...

  2. f12 headers 变字典快捷方式

  3. Ubuntu添加中文输入法

    1.点击左上角Dash home 2.输入keyboard input methods 3.点击keyboard input methods,选择input methods,打钩. 4.点击下三角,选 ...

  4. oracle11G 用户密码180天修改概要文件过程

    oracle11G 用户密码180天修改概要文件过程 原因 创建用户的时候不指定概要文件的默认的概要文件是default, 而默认的概要文件中的设置如下,注意斜体部分 PROFILE RESOURCE ...

  5. nova vnc proxy基本原理

    先上图 VNC Proxy的功能: 将公网(public network)和私网(private network)隔离 VNC client运行在公网上,VNCServer运行在私网上,VNC Pro ...

  6. Oracle:WITH AS () Merge ?

    WITH AS 语法在SQL SERVER 和ORACLE数据库上均支持,主要用于子查询.语法如下: WITH expression_name [ ( column_name [,...n] ) ] ...

  7. JavaScript 实现textarea限制输入字数, 输入框字数实时统计更新,输入框实时字数计算移动端bug解决

    textarea称文本域,又称文本区,即有滚动条的多行文本输入控件,在网页的提交表单中经常用到.与单行文本框text控件不同,它不能通过maxlength属性来限制字数,为此必须寻求其他方法来加以限制 ...

  8. 【安富莱专题教程第5期】工程调试利器RTT实时数据传输组件,替代串口调试,速度飞快,可以在中断和多任务中随意调用

    说明:1.串口作为经典的调试方式已经存在好多年了,缺点是需要一个专门的硬件接口.现在有了SEGGER的RTT(已经发布有几年了),无需占用系统额外的硬件资源,而且速度超快,是替代串口调试的绝佳方式.2 ...

  9. 文末福利丨i春秋互联网安全校园行第1站精彩回顾

    活动背景 为响应国家完善网络安全人才培养体系.推动网络安全教育的号召,i春秋特此发起“互联网安全校园行”系列活动.旨在通过活动和知识普及提升大学生信息安全意识,并通过线下交流.技能分享.安全小活动以及 ...

  10. [Swift]LeetCode420. 强密码检验器 | Strong Password Checker

    A password is considered strong if below conditions are all met: It has at least 6 characters and at ...