gpt4 book ai didi

c# - 替换 MailItem 正文中的文本

转载 作者:行者123 更新时间:2023-11-30 21:58:12 25 4
gpt4 key购买 nike

我在 Outlook Explorer 中添加了一个功能区按钮,单击它会从选定的电子邮件中创建一封新电子邮件。使用 MailItem.Copy 方法效果很好。但我还需要用不同的值替换消息正文中的一些文本。

问题是电子邮件可能是 HTML/RichText 格式的电子邮件并且包含文本格式和/或图片。简单地替换 Body 属性中的文本值会丢失所有文本格式和图片。

所以下面的代码不好

newMailItem.Body = newMailItem.Body.Replace("Old Value", "New Value");

我还尝试将 HTML 和 RTF 值加载到 DevExpress RichEditControl 中,并使用 RichEditControl.Document.ReplaceAll 方法尝试替换出现的文本。但是 DevExpress RichEditControl 以不同方式更改/格式化 RTF/HTML 值,并在 MailItem 中重新设置 HTML/RTF 时导致消息看起来错误。

我还尝试通过获取对 Word 文档的引用来替换文本(参见下面的代码)。但这也不起作用。

Inspector inspector = newMailItem.GetInspector;
if (inspector.IsWordMail())
{
Microsoft.Office.Interop.Word.Document wordDocument =
inspector.WordEditor as Microsoft.Office.Interop.Word.Document;

Microsoft.Office.Interop.Word.Find findObject = wordDocument.Application.Selection.Find;
findObject.ClearFormatting();
findObject.Text = "old value";
findObject.Replacement.ClearFormatting();
findObject.Replacement.Text = "new value";

object replaceAll = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref replaceAll, ref missing, ref missing, ref missing, ref missing);
}

那么问题来了,如何替换 MailItem 正文中的文本值并确保现有的文本格式和图片不会丢失?

最佳答案

我通过显示检查器窗口让它工作,因为这似乎在执行查找和替换后将 MailItem.Body 和 RTF/HTML 属性与 Word 文档重新同步。但它很慢而且闪烁。

我已经粘贴了下面的代码。如果有人能想到更快、更少闪烁的方法,请告诉我。

Inspector inspector = newMailItem.GetInspector;
if (inspector.IsWordMail())
{
newMailItem.Display();
wordDocument = inspector.WordEditor as Microsoft.Office.Interop.Word.Document;

Microsoft.Office.Interop.Word.Range range = wordDocument.Range(wordDocument.Content.Start, wordDocument.Content.End);
Microsoft.Office.Interop.Word.Find findObject = range.Find;
findObject.ClearFormatting();
findObject.Text = "old value";
findObject.Replacement.ClearFormatting();
findObject.Replacement.Text = "new value";

object replaceAll = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref replaceAll, ref missing, ref missing, ref missing, ref missing);
}

关于c# - 替换 MailItem 正文中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30232370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com