如何用超链接替换 ​​Paragraph.Text 中的纯 URL 字符串?

How can I replace a plain URL string in a Paragraph.Text by a Hyperlink?

我有一个包含多个 Paragraph 的 Microsoft Word 文档,我必须将其中一个段落中的普通 URL 替换为实际可以单击的 Hyperlink

整个 link 之前都是已知的,我只需要找到包含它的段落,然后用真正的 link 替换该文本(HTML 不起作用)。

// this is how I determine the positions in the text of the paragraph
var urlStartIndex = paragraphRange.Text.IndexOf(linkUrl);
var urlEndIndex = urlStartIndex + linkUrl.Length;

但我无法用 link.

替换 Paragraph.Text 的一部分

段落中的示例文字如

Click the following link: https://www.somewhereinthe.net/something/somethingmore

其中以 https 开头的部分应该完全替换为真正的 link 以使其成为

Click the following link: somewhere

起初,我试图直接插入它而不是 url,但是简单地删除 url 并粘贴 link 显然不容易完成。

以下尝试将整个段落替换为可点击但未突出显示(蓝色和带下划线的字体)的 link,但其 TextToDisplay 也为 Address,并且因此,导致网络无处可寻:

private static void ReplacePaypalLinkIn(Word.Paragraph paragraph, Word.Document docx, string linkUrl)
{
    var paragraphRange = paragraph.Range;
    // find the start index of the url
    var urlStartIndex = paragraphRange.Text.IndexOf(linkUrl);
    // calculate the last index of the url
    var urlEndIndex = urlStartIndex + linkUrl.Length;
    // and add it to the hyperlinks of the document at this very paragraph (Anchor)
    var link = docx.Hyperlinks.Add(Anchor: paragraphRange, Address: linkUrl, TextToDisplay: "somewhere");
}

我如何才能以实际生成 Paragraph 的方式替换 URL,其中包含 URL 之前的文本,而不是 URL,可点击且格式正确的 link 替换为给定的 TextToDisplay?

Word 通过 HYPERLINK 字段 管理超链接。字段是 Word 用于处理动态内容的内容。一些示例,除了超链接之外,还有页码、日期、交叉引用 - 任何可以更改或触发操作的内容。

所以这里需要做的是 1) 找到 URL 和 2) 用超链接替换它。

通常,使用 Word 的 Find 功能来定位文本中的特定字符串是很方便的。 (问题中的代码说明的技术依赖于文档中字符串的 索引位置 。不幸的是,这种方法根本不可靠,因为 Word 文档往往包含 "hidden characters":不可见的控制字符,但改变文档内容的索引位置值。)

以下代码片段演示了如何使用 Find 在文档中定位 URL 字符串并在其位置插入超链接(字段),使用方法 Hyperlinks.Add

string targetUrl = @"https://www.somewhereinthe.net/something/somethingmore";
string displayText = "somewhere";
Word.Range rngUrl = doc.Content;

Word.Find fd = rngUrl.Find;
fd.Text = targetUrl;
bool success = fd.Execute();
if (success)
{
    doc.Hyperlinks.Add(rngUrl, targetUrl, Type.Missing, Type.Missing, displayText, Type.Missing);
}

可在 Word 语言参考中找到 Find 可用的各种属性。了解 Execute 运行时可能涉及的所有内容是个好主意。此处显示的内容简化为演示基本原理所需的内容。

重要的是要立即知道 Range 搜索 运行 将切换到 "found" 字词。所以 rngUrl 开始包含文档的正文,但是在找到 URL 时,它减少到 URL。因此,超链接将替换 URL.