HTMLBody и WordEditor.CheckSpelling, похоже, не нравятся друг другу во встроенном ответе
-
22-12-2019 - |
Вопрос
Так вот в чем проблема.Когда открывается встроенный ответ, я могу без проблем отредактировать его.Затем, когда я запускаю проверку орфографии через текстовый редактор, я теряю возможность редактировать через HMTLBody электронного письма.Под этим я имею в виду, что если я сделаю что-то вроде этого:
email.HTMLBody = email.HTMLBody.Replace("cat", "dog");
тело письма не изменится.Если я выделю email
после внесения изменений HTMLBody отобразит изменения, но не отобразится в электронном письме.
Теперь, если я сначала сделаю все редактирование и затем выполните проверку орфографии, она пропустит весь неправильный текст, но не изменит фактический текст электронного письма.Кстати, это происходит только для тела электронного письма.Я могу изменить Кому:, Копию: и Тему:поля просто в порядке, неважно, что происходит.Это также влияет только на встроенные ответы, а не на любое электронное письмо, отображаемое в собственном инспекторе.Я могу начать ответ как встроенный, а затем вставить его, и проблемы не возникнет.
Вот так я проверяю орфографию
Outlook.Inspector insp = email.GetInspector;
Word.Document Doc = insp.WordEditor;
if(!doc.SpellingChecked)
{
doc.CheckSpelling();
email.Save();
}
Если вам нужна какая-либо информация, дайте мне знать.
РЕДАКТИРОВАТЬ
Итак, еще немного поразмыслив над тем, что сказал @Dmitry, я решил вернуться и поработать над использованием .WordEditor
из электронной почты.Вот результаты.
Я смог довольно хорошо отредактировать тело электронного письма с помощью текстового редактора, но он переформатировал бы все электронное письмо (удалив разделительные линии ответа/пересылки) и окрасил все электронное письмо в цвет ответа (синий для меня).Мне удалось исправить это, используя начальное и конечное значения в .Range
документа следующим образом:
Word.Document emailEditor = GetCurrentMailWordEditor(); // A function I use to retrieve the correct editor
Word.Range rng = emailEditor.Range(startIndex, endIndex); // To get only the specific part I want to change
rng.Text = rng.Text.Replace("cat", "dog");
вместо
Word.Document emailEditor = GetCurrentMailWordEditor();
Word.Range rng = emailEditor.Range();
rng.Text = rng.Text.Replace("cat", "dog");
Проверку орфографии мне удалось исправить, получив .WordEditor
из правильного источника вот так:
Word.Document doc;
if(this.Application.ActiveInspector() != null)
{
OutlookInspector insp = this.Application.GetActiveInspector();
doc = insp.WordEditor;
}
else
{
Outlook.Explorer exp = this.Applicaotn.GetActiveExplorer();
doc = exp.ActiveInlineResponseWordEditor;
}
if(!doc.SpellingChecked)
{
doc.CheckSpelling();
email.Save();
}
Решение
Если у вас уже есть экземпляр объекта «Документ» Word, почему бы не выполнить замену текста также с использованием объектной модели Word?