对于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. linux下tomcat服务器的启动和关闭以及查看实时打印日志

    本页面中的操作都在tomcat的bin目录下 <一> 一般我都是使用: ./shutdom.sh //关闭tomcat ./startup.sh //开启tomcat服务 <二> ...

  2. apidoc @apiGroup兼容中文

    1.找到安装目录 中 api_group.js C:\Users\ZhiJiao361\AppData\Roaming\npm\node_modules\apidoc\node_modules\api ...

  3. aarch64的架构:unrecognized command line option '-mfpu=neon'

    不用添加这个'-mfpu=neon'的编译器选项了,因为这个架构下neon是默认启动的. 参考: https://lists.linaro.org/pipermail/linaro-toolchain ...

  4. C++通过GetAdapatersInfo获取网卡配置信息

    DWORD GetAdaptersInfo( PIP_ADAPTER_INFO pAdapterInfo, //指向一个缓冲区,用来取得IP_ADAPTER_INFO结构列表 PULONG pOutB ...

  5. 两行 CSS 代码实现图片任意颜色赋色技术

    很久之前在张鑫旭大大的博客看到过一篇 PNG格式小图标的CSS任意颜色赋色技术,当时惊为天人,感慨还可以这样玩,私底下也曾多次想过有没有其他方法可以实现,又或者不仅仅局限于 PNG 图片. mix-b ...

  6. linux入门--Linux桌面环境(桌面系统)大比拼[附带优缺点]

    早期的 Linux 系统都是不带界面的,只能通过命令来管理,比如运行程序.编辑文档.删除文件等.所以,要想熟练使用 Linux,就必须记忆很多命令. 后来随着 Windows 的普及,计算机界面变得越 ...

  7. partition分区

    1.按id拆分 mysql -uroot mysql>use test; mysql>create table topic ( tid ) not ),partition t1 value ...

  8. JVM内存知识备忘

    又是一篇备忘... 主要记录一些知识,进行一些资源的汇总. 先来群里liufor大大提供的两张图,清晰易懂: Dockerized Java https://www.youtube.com/watch ...

  9. scala合并Array

    val newarray = Array(1,2,3)++Array(4,5) newarray.foreach(println) 打印结果: 1 2 3 4 5

  10. java代码之美(8)---guava字符串工具

    guava字符串工具 在java开发过程中对字符串的处理是非常频繁的,google的guava工具对字符串的一些处理进行优化,使我们开发过程中让自己的代码看去更加美观,清爽. 一.Joiner 根据给 ...