HTMLBody和WordEditor.CheckSpelling在内联响应上似乎不太喜欢对方

本文关键字:喜欢 响应 WordEditor CheckSpelling HTMLBody | 更新日期: 2023-09-27 18:16:01

问题来了。当内联响应打开时,我可以毫无问题地编辑它。然后,当我通过word编辑器运行拼写检查时,我失去了通过电子邮件的HMTLBody进行编辑的能力。我的意思是,如果我这样做:

email.HTMLBody = email.HTMLBody.Replace("cat", "dog");

它不会改变电子邮件的正文。如果我在更改后突出显示email, HTMLBody将显示更改,但它不会显示在电子邮件中。

现在,如果我先做所有的编辑,然后做拼写检查,它将检查所有错误的文本,但它不会改变实际的电子邮件文本。顺便说一下,这只发生在电子邮件的正文部分。无论发生什么,我都可以更改To:, CC:和Subject:字段。它也只影响内联响应,而不影响任何弹出到它自己的检查器中的电子邮件。我可以开始一个内联回复,然后弹出它,问题就不会发生了。

这是我做拼写检查的方式

Outlook.Inspector insp = email.GetInspector;
Word.Document Doc = insp.WordEditor;
if(!doc.SpellingChecked)
{
    doc.CheckSpelling();
    email.Save();
}

如果你需要任何信息,请告诉我。

编辑

所以,多考虑一下@Dmitry说的话,我决定回去使用电子邮件中的.WordEditor。这是结果。

我可以很好地使用word编辑器编辑电子邮件正文,但它会重新格式化整个电子邮件(删除回复/转发分隔行),并用回复颜色(对我来说是蓝色)为整个电子邮件上色。我能够通过使用文档的.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();
}

HTMLBody和WordEditor.CheckSpelling在内联响应上似乎不太喜欢对方

如果你已经有了Word的Document对象的实例,为什么不使用Word对象模型来替换文本呢?