Кто-нибудь знает, как я могу изменить текст объекта Word.Range, но при этом сохранить его формат? Например, если у меня есть «этот текст», и я изменяю его на «этот текст», текстовый текст по-прежнему будет выделен жирным шрифтом.
Я ищу способ изменить весь текст диапазона, а не только одно слово, поскольку я получаю новый текст из независимого API, я могу предположить, что новый текст и старый текст имеют одинаковый номер слов.
Вот что у меня получилось:
for (int i = 0; i < oldWords.Length; i++)
{
if (oldWords[i] == newWords[i])
continue;
object Replace = WdReplace.wdReplaceOne;
object FindText = oldWords[i];
object ReplaceWith = newWords[i];
var success = Sentence.Find.Execute(parameters stub);
}
Но по какой-то причине он успешен только в первом Execute, потому что выбор диапазона остается на найденном слове.
Обновлено: получил, после каждого выполнения мне приходилось восстанавливать исходное конечное положение моего диапазона.
Спасибо.





Вы не можете использовать метод Execute для изменения текста с форматированием.
Сделать это можно так:
Range rng=doc.Content;
rng.Find.Execute(ref finding, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing)
//if this method returns true, you will get the range at the finding location.
if (rng.Find.Found)
{
rng.Text='sth';
rng.Bold=0;
}
Может быть, это поможет тебе.