標籤: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超連結