C# 大量刪除Word超連結

來源:互聯網
上載者:User

標籤:link   spl   namespace   extra   att   一個個   pac   amp   document   

對於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);                              }                          }                      }                  }              }         }    }}
View Code

 

 (本文完)

如需轉載,請註明出處。

C# 大量刪除Word超連結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.