HTMLBody和WordEditor.CheckSpelling似乎在内联响应中彼此不喜欢

时间:2014-07-31 15:55:33

标签: c# outlook add-in outlook-2013

所以这就是问题所在。当打开内联响应时,我可以毫无问题地编辑它。然后,当我通过单词编辑器运行拼写检查时,我失去了通过电子邮件的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。这就是结果。

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

1 个答案:

答案 0 :(得分:1)

如果您已经拥有Word文档对象的实例,为什么不使用Word对象模型替换文本呢?