下面就详细介绍如何去除word文档中的超链接。首先,查看带有许多超链接的示例文档:

第 1 步:创建一个新的 word 文档并从文件中加载示例文档:
Document doc = new Document();doc.LoadFromFile("Sample.docx");
第 2 步:创建一个方法 FindAllHyperlinks() 以获取示例文档中的所有超链接。
private List FindAllHyperlinks(Document document){List hyperlinks = new List();foreach (Section section in document.Sections){foreach (DocumentObject sec in section.Body.ChildObjects){if (sec.DocumentObjectType == DocumentObjectType.Paragraph){foreach (DocumentObject para in (sec as Paragraph).ChildObjects){if (para.DocumentObjectType == DocumentObjectType.Field){Field field = para as Field;if (field.Type == FieldType.FieldHyperlink){hyperlinks.Add(field);}}}}}}return hyperlinks;}
第 3 步:删除超链接的字体颜色和下划线格式。
private void FormatFieldResultText(Body ownerBody,int sepOwnerParaIndex,int endOwnerParaIndex,int sepIndex,int endIndex){for (int i = sepOwnerParaIndex; i <= endOwnerParaIndex; i++){Paragraph para = ownerBody.ChildObjects[i] as Paragraph;if (i == sepOwnerParaIndex && i == endOwnerParaIndex){for (int j = sepIndex + 1; j < endIndex; j++){FormatText(para.ChildObjects[j] as TextRange);}}else if (i == sepOwnerParaIndex){for (int j = sepIndex + 1; j < para .ChildObjects .Count ; j++){FormatText(para.ChildObjects[j] as TextRange);}}else if (i == endOwnerParaIndex){for (int j = 0; j < endIndex; j++){FormatText(para.ChildObjects[j] as TextRange);}}else{for (int j = 0; j < para.ChildObjects.Count; j++){FormatText(para.ChildObjects[j] as TextRange);}}}}private void FormatText(TextRange tr){tr.CharacterFormat.TextColor = Color.Black;tr.CharacterFormat.UnderlineStyle = UnderlineStyle.None;}
第 4 步:展平超链接字段。
private void FlattenHyperlinks(Field field){int ownerParaIndex = field.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.OwnerParagraph);int fieldIndex = field.OwnerParagraph.ChildObjects.IndexOf(field);Paragraph sepOwnerPara = field.Separator.OwnerParagraph;int sepOwnerParaIndex = field.Separator.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.Separator.OwnerParagraph);int sepIndex = field.Separator.OwnerParagraph.ChildObjects.IndexOf(field.Separator);int endIndex = field.End.OwnerParagraph.ChildObjects.IndexOf(field.End);int endOwnerParaIndex = field.End.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.End.OwnerParagraph);FormatFieldResultText(field.Separator.OwnerParagraph.OwnerTextBody, sepOwnerParaIndex, endOwnerParaIndex, sepIndex, endIndex);field.End.OwnerParagraph.ChildObjects.RemoveAt(endIndex);for (int i = sepOwnerParaIndex; i >= ownerParaIndex; i--){if (i == sepOwnerParaIndex && i == ownerParaIndex){for (int j = sepIndex; j >= fieldIndex; j--){field.OwnerParagraph.ChildObjects.RemoveAt(j);}}else if (i == ownerParaIndex){for (int j = field.OwnerParagraph.ChildObjects.Count - 1; j >= fieldIndex; j--){field.OwnerParagraph.ChildObjects.RemoveAt(j);}}else if (i == sepOwnerParaIndex){for (int j = sepIndex; j >= 0; j--){sepOwnerPara.ChildObjects.RemoveAt(j);}}else{field.OwnerParagraph.OwnerTextBody.ChildObjects.RemoveAt(i);}}}
第 5 步:将文档保存到文件
doc.SaveToFile("removehyperlinks.docx", FileFormat.Docx);
去除word文档超链接后的有效截图:

如何从word文档中删除超链接的完整代码:
public Removehyperlink(){Document doc = new Document();doc.LoadFromFile("Sample.docx");List hyperlinks = FindAllHyperlinks(doc);for (int i = hyperlinks.Count - 1; i >= 0; i--){FlattenHyperlinks(hyperlinks[i]);}doc.SaveToFile("removehyperlinks.docx", FileFormat.Docx);}private List FindAllHyperlinks(Document document){List hyperlinks = new List();foreach (Section section in document.Sections){foreach (DocumentObject sec in section.Body.ChildObjects){if (sec.DocumentObjectType == DocumentObjectType.Paragraph){foreach (DocumentObject para in (sec as Paragraph).ChildObjects){if (para.DocumentObjectType == DocumentObjectType.Field){Field field = para as Field;if (field.Type == FieldType.FieldHyperlink){hyperlinks.Add(field);}}}}}}return hyperlinks;}private void FlattenHyperlinks(Field field){int ownerParaIndex = field.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.OwnerParagraph);int fieldIndex = field.OwnerParagraph.ChildObjects.IndexOf(field);Paragraph sepOwnerPara = field.Separator.OwnerParagraph;int sepOwnerParaIndex = field.Separator.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.Separator.OwnerParagraph);int sepIndex = field.Separator.OwnerParagraph.ChildObjects.IndexOf(field.Separator);int endIndex = field.End.OwnerParagraph.ChildObjects.IndexOf(field.End);int endOwnerParaIndex = field.End.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.End.OwnerParagraph);FormatFieldResultText(field.Separator.OwnerParagraph.OwnerTextBody, sepOwnerParaIndex, endOwnerParaIndex, sepIndex, endIndex);field.End.OwnerParagraph.ChildObjects.RemoveAt(endIndex);for (int i = sepOwnerParaIndex; i >= ownerParaIndex; i--){if (i == sepOwnerParaIndex && i == ownerParaIndex){for (int j = sepIndex; j >= fieldIndex; j--){field.OwnerParagraph.ChildObjects.RemoveAt(j);}}else if (i == ownerParaIndex){for (int j = field.OwnerParagraph.ChildObjects.Count - 1; j >= fieldIndex; j--){field.OwnerParagraph.ChildObjects.RemoveAt(j);}}else if (i == sepOwnerParaIndex){for (int j = sepIndex; j >= 0; j--){sepOwnerPara.ChildObjects.RemoveAt(j);}}else{field.OwnerParagraph.OwnerTextBody.ChildObjects.RemoveAt(i);}}}private void FormatFieldResultText(Body ownerBody, int sepOwnerParaIndex, int endOwnerParaIndex, int sepIndex, int endIndex){for (int i = sepOwnerParaIndex; i <= endOwnerParaIndex; i++){Paragraph para = ownerBody.ChildObjects[i] as Paragraph;if (i == sepOwnerParaIndex && i == endOwnerParaIndex){for (int j = sepIndex + 1; j < endIndex; j++){FormatText(para.ChildObjects[j] as TextRange);}}else if (i == sepOwnerParaIndex){for (int j = sepIndex + 1; j < para.ChildObjects.Count; j++){FormatText(para.ChildObjects[j] as TextRange);}}else if (i == endOwnerParaIndex){for (int j = 0; j < endIndex; j++){FormatText(para.ChildObjects[j] as TextRange);}}else{for (int j = 0; j < para.ChildObjects.Count; j++){FormatText(para.ChildObjects[j] as TextRange);}}}}private void FormatText(TextRange tr){tr.CharacterFormat.TextColor = Color.Black;tr.CharacterFormat.UnderlineStyle = UnderlineStyle.None;}
以上便是如何在C#去除word文档中的超链接,如果您有其他问题也可以继续浏览本系列文章,获取相关教程,你还可以给我留言或者加入我们的官方技术交流群。
欢迎下载|体验更多E-iceblue产品
获取更多信息请咨询在线客服 ;
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!