Как заменить обычную строку URL в Paragraph.Text на гиперссылку? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть документ Microsoft Word с несколькими Paragraph с, и я должен заменить простой URL-адрес в одном из абзацев на Hyperlink, на который можно щелкнуть.

Вся ссылка известна раньше мне просто нужно найти абзац, содержащий его, и затем заменить этот текст реальной ссылкой (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;

, но я не могу заменить только часть Paragraph.Text со ссылкой.

Пример текста в абзаце похож на

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

, где только часть, начинающаяся с https, должна быть полностью заменена реальной ссылкой, чтобы сделать ее

Click the following link: somewhere

Сначала я попытался вставить его вместо URL-адреса, но, очевидно, просто удалить URL-адрес и вставить вместо него ссылку.

Следующая попытка заменила весь абзац по ссылке, которая кликабельна, но не выделена (синий и подчеркнутый шрифт), но также имеет 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");
}

Как я могу заменить этот URL таким образом, что на самом деле получается Paragraph, который включает в себя текст перед URL и вместо URL - кликабельную и хорошо отформатированную ссылку, заменяемую данным TextToDisplay?

1 Ответ

1 голос
/ 09 апреля 2020

Word управляет гиперссылками через поля HYPERLINK . Поля - это то, что Word использует для работы с динамическим контентом c. Некоторыми примерами, помимо гиперссылок, являются номера страниц, даты, перекрестные ссылки - все, что может изменить или вызвать действие.

Итак, что здесь должно произойти, это 1) найти URL и 2) заменить его на гиперссылка.

Обычно целесообразно использовать функцию Word Find, чтобы найти указанную строку c в тексте. (Метод, проиллюстрированный кодом в вопросе, основан на расположении индекса строки в документе. К сожалению, этот подход вовсе не надежен, так как документ Word имеет тенденцию скрывать «скрытые символы»: control символы, которые не видны, но изменяют значения местоположения индекса содержимого документа.)

В следующем фрагменте кода показано, как использовать 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);
}

Какие различные свойства доступны для Find, можно найти в справочнике по языку Word. Это хорошая идея, чтобы понять, что все может быть вовлечено, когда Execute работает. То, что здесь показано, сводится к тому, что необходимо для демонстрации принципа базового c.

Сразу же важно знать, что Range, на котором выполняется поиск, переключится на термин "найденный". Итак, rngUrl начинается с охвата тела документа, но при поиске URL-адреса он сводится к URL-адресу. Таким образом, гиперссылка заменит URL.

...