C# HTMLBody和WordEditor.CheckSpelling don';I don’我似乎不喜欢对方的在线回复

C# HTMLBody和WordEditor.CheckSpelling don';I don’我似乎不喜欢对方的在线回复,c#,outlook,add-in,outlook-2013,C#,Outlook,Add In,Outlook 2013,这就是问题所在。当内联响应打开时,我可以毫无问题地编辑它。然后,当我通过word编辑器运行拼写检查时,我失去了通过电子邮件的HMTLBody进行编辑的能力。我的意思是,如果我这样做: email.HTMLBody=email.HTMLBody.Replace(“猫”、“狗”) 它不会改变电子邮件中的正文。如果我在更改后突出显示email,HTMLBody将显示更改,但不会显示在电子邮件中 现在,如果我先做所有的编辑,然后做拼写检查,它会检查所有错误的文本,但不会改变实际的电子邮件文本。顺便说一句

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

email.HTMLBody=email.HTMLBody.Replace(“猫”、“狗”)

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

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

这就是我检查拼写的方法

Outlook.Inspector insp = email.GetInspector;
Word.Document Doc = insp.WordEditor;
if(!doc.SpellingChecked)
{
    doc.CheckSpelling();
    email.Save();
}
如果你需要任何信息,请告诉我

编辑

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

我可以使用word editor很好地编辑电子邮件正文,但它会重新格式化整个电子邮件(删除回复/转发分隔线),并用回复颜色(我用蓝色)为整个电子邮件上色。我可以通过使用文档的
.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对象模型进行文本替换呢?

我确实尝试过,但这样做会删除HTML(?)格式。我的意思是,分隔先前电子邮件的行被删除,所有电子邮件都变成蓝色(回复的默认颜色)。因此,我回到使用Word文档替换内联回复的文本。最后,我通过使用特定范围(即
Word.range=doc.range(start,end)
然后
range.Text=range.Text.Replace(“cat”,dog”)
)而不是整个文档(即
doc.range().Text=doc.range().Text.Replace(“cat,dog”)
)解决了上面的问题。但我仍然无法拼写检查内联响应。您可以使用Explorer.ActiveInlineResponseWordEditor访问内联响应的文档对象。