HTMLBody und WordEditor.CheckSpelling scheinen sich bei der Inline-Antwort nicht zu mögen
-
22-12-2019 - |
Frage
Hier liegt also das Problem.Wenn eine Inline-Antwort geöffnet wird, kann ich sie problemlos bearbeiten.Wenn ich dann die Rechtschreibprüfung über den Texteditor durchführe, verliere ich die Möglichkeit, die E-Mail über den HMTLBody zu bearbeiten.Damit meine ich, wenn ich so etwas mache:
email.HTMLBody = email.HTMLBody.Replace("cat", "dog");
Der Text in der E-Mail wird dadurch nicht geändert.Wenn ich hervorhebe email
Nachdem die Änderungen vorgenommen wurden, zeigt der HTMLBody die Änderungen an, sie werden jedoch nicht in der E-Mail angezeigt.
Nun, wenn ich zuerst die gesamte Bearbeitung mache und Dann Führen Sie die Rechtschreibprüfung durch. Dabei wird der gesamte falsche Text durchsucht, der eigentliche E-Mail-Text wird jedoch nicht geändert.Dies geschieht übrigens nur für den E-Mail-Text.Ich kann An:, CC: und Betreff ändern:Felder ganz gut, egal was passiert.Es wirkt sich auch nur auf die Inline-Antworten aus und nicht auf E-Mails, die im eigenen Inspektor angezeigt werden.Ich kann eine Antwort als Inline-Antwort starten und sie dann einfügen, ohne dass das Problem auftritt.
Auf diese Weise mache ich die Rechtschreibprüfung
Outlook.Inspector insp = email.GetInspector;
Word.Document Doc = insp.WordEditor;
if(!doc.SpellingChecked)
{
doc.CheckSpelling();
email.Save();
}
Wenn Sie Informationen benötigen, lassen Sie es mich wissen.
BEARBEITEN
Nachdem ich etwas mehr darüber nachgedacht hatte, was @Dmitry gesagt hatte, beschloss ich, zurückzugehen und an der Verwendung des zu arbeiten .WordEditor
aus der E-Mail.Das sind die Ergebnisse.
Ich konnte den E-Mail-Text ziemlich gut mit dem Texteditor bearbeiten, aber dadurch wurde die gesamte E-Mail neu formatiert (Trennlinien für Antwort/Weiterleitung entfernt) und die gesamte E-Mail in der Antwortfarbe (bei mir blau) eingefärbt.Ich konnte dies beheben, indem ich den Start- und Endwert im verwendet habe .Range
des Dokuments etwa so:
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");
anstatt
Word.Document emailEditor = GetCurrentMailWordEditor();
Word.Range rng = emailEditor.Range();
rng.Text = rng.Text.Replace("cat", "dog");
Die Rechtschreibprüfung konnte ich beheben, indem ich das bekam .WordEditor
aus der richtigen Quelle wie folgt:
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();
}
Lösung
Wenn Sie bereits über eine Instanz des Word-Dokumentobjekts verfügen, warum führen Sie die Textersetzung nicht auch mithilfe des Word-Objektmodells durch?