如何用超链接替换 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.
我有一个包含多个 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.