C# 批量删除Word超链接

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

(本文完)

如需转载,请注明出处。

原文地址:https://www.cnblogs.com/Yesi/p/9603782.html

时间: 2024-10-09 05:53:15

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

C# 插入、格式化、删除Word超链接

超链接简单来讲就是内容链接,通过设置超链接可以实现对象与网页.站点之间的连接.链接目标可以是网页.图片.邮件地址.文件夹或者是应用程序.设置链接的对象可以是文本或者图片.在下面的示例中,将讲述如何通过使用类库来添加Word超链接.同理,我们也可以格式化超链接,例如,设置超链接文本颜色,下划线,链接地址等,也可以删除文档中已经存在的一些超链接,例如:页眉处的链接.正文段落中的链接.表格中的链接.图片中的链接.以上操作我们都可以通过借助下面的类库来实现.内容要点: 添加Word超链接 格式化Word

Word批量删除所有书签

Word中的书签功能可快速.准确定位文档中特定的位置,经常用于模板定制.文档产出等. 可一直以来,书签功能存在一个不便的操作,即无法批量删除,只能单个删除,操作极不友好. 解决方案 我用代码暂时还改变不了世界,但可以提高工作效率.使用两VBA代码,即可完成遍历.删除. ALT+F11,打开VBA编辑器,在ThisDocument页面写下语句,F5执行即可. Sub DelBookmarks() Dim MyBk As Bookmark For Each MyBk In ActiveDocumen

在Word中怎样批量删除空行,这些点主要注意

在工作中经常接触的办公软件就是Word了,熟练使用Word中的技能是准时下班的保证.这就要求我们对Word中的各项技能都熟练于心,很多朋友诉苦Word中的排版不熟悉,每次写一篇文章排版都要花费很多心思. 针对大家的问题,今天对Word中常见的4个排版技巧进行总结归纳,不会的赶快学习吧. 1.批量删除空行一篇撰写完成的文章,习惯点击enter键造成空行太多,怎样批量删除其中的空行呢? 解决方法:这里需要使用查找功能进行编辑,使用快捷键进行操作[Ctrl+H]打开查看对话框,在[查找内容]选项框中输

批量删除本地指定扩展名文件工具

VC工具在编译时,会生成大量临时文件,占用很多空间,项目多了,手动删除就会很费力,所以我做了个小工具,可以批量删除指定目录,指定扩展名的文件. 此工具根据配置文件指定的扩展名删除文件,一般我删除VC的扩展名为:.ipch.pdb.pch.sdf.tlog.obj.idb.ilk.res.根据需要,自行配置. 下载地址:http://download.csdn.net/detail/yxstars/8201833 下面是一些vc扩展名的含义: .APS:存放二进制资源的中间文件,VC把当前资源文件

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

有时候整理文档的时候,如果是从网上复制的文字,可能会因为复制而产生很多的回车符.怎样能批量去掉这些个回车符呢,下面马上告诉你批量删除wps文档里的回车符的方法!WPS使用技巧分享! 想要批量删除批量删除wps文档里的回车符,我们首先要了解回车符的种类!WPS文字或者Word中的回车符分为两种:一种为自带的回车符,一种为网络文件产生的回车符,称之为换行符. 1.批量删除wps文档里的回车符方法如下: 编辑--> 替换--> 替换-->高级-->特殊字符-->选择段落标记--&g

Java 添加、替换、删除Word中的图片

Java 添加.替换.删除Word中的图片 文档中,可以通过图文混排的方式来增加内容的可读性,相比纯文本文档,在内容展现方式上也更具美观性.在给文档添加图片时,可设置图片的文本环绕方式.旋转角度.图片高度/宽度等:另外,也可对文档中已有的图片实现替换.删除等操作.本文将从在Word文档中添加.替换.删除图片等三个操作需求来介绍.具体代码可参考以下示例. 工具使用:Free Spire.Doc for Java(免费版) [示例1]添加图片到Word import com.spire.doc.*;

mysq批量删除sleep进程

由于sleep进程比较多,就写个特简单的脚本,批量删除下,只保留5个即可 #!/bin/sh n=`/export/servers/mysql/bin/mysqladmin processlist -uroot -pxxxxx|grep -i sleep |wc -l` echo $n if [ "$n" -gt 10 ] then for i in `/export/servers/mysql/bin/mysqladmin processlist -uroot -pxxxxxx|gr

批量删除遇见的问题

做批量删除时遇见的问题: org.apache.ibatis.binding.BindingException: Parameter 'ids' not found. Available parameters are [array] 前台jsp页面的ajax请求可以进入: 但是点击批量删除的按钮时会报这个错误: 后来发现是Mapper中的collection定义错了: 把<foreach>标签中的collection="ids"改为collection="arra

利用yii2 gridview实现批量删除案例[转]

今天仍然继续探讨GridView的问题,昨天有个小伙伴留言说你用gridview给我去掉表头的链接?我想啊想,这用gridview确实不容易实现,至少我没想出来,会的下方可留言.但是呢,这根gridview有个毛线关联啊,明明是要设置ActiveDataProvider,你要我怎么用gridview实现嘛. 这个问题也是很简单的,我们来看看具体实现 $dataProvider = new ActiveDataProvider([ "query" => $query, ]); $d