C# 使用office automation获取整个.docx文本,包括字体和属性(粗体、斜体…)

C# 使用office automation获取整个.docx文本,包括字体和属性(粗体、斜体…),c#,outlook,office-interop,C#,Outlook,Office Interop,所以我试图从word文档中选择文本,该文档包含斜体、粗体和特定字体系列的文本 因此,我找到了以下代码来选择所有文本: //doc is the opened document with office automation, this part works string text = doc.Content.Text; int end = text.Length; Microsoft.Office.Interop.Word.Range range = doc.Range(Start: 0, End

所以我试图从word文档中选择文本,该文档包含斜体、粗体和特定字体系列的文本

因此,我找到了以下代码来选择所有文本:

//doc is the opened document with office automation, this part works
string text = doc.Content.Text;
int end = text.Length;
Microsoft.Office.Interop.Word.Range range = doc.Range(Start: 0, End: end);
range.Select();
然后我使用它将文本复制到Outlook邮件中:

Microsoft.Office.Interop.Outlook.Application outlook = new   Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.MailItem oMsg = (Microsoft.Office.Interop.Outlook.MailItem)outlook.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
oMsg.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML;
oMsg.Body = range.Text ;
然后,当我观看消息html正文时,我只使用calibri字体,没有粗体或斜体

我想尝试的是与我们手动操作时得到的一样:

开放式word文档 选择所有文本,然后复制(ctrl+c) 在outlook中创建邮件 在邮件中粘贴文本(ctrl+v)

这样做时,可以很好地复制(字体系列、粗体等都很好),但在代码中这样做时,它只接受文本

请参阅本图片中的差异(下面的一个波纹管是通过编程制作的,下面的一个是手动制作的):

如何修复此问题(如果可能)

编辑:在Eugene的回答之后,我添加以下内容:

                Microsoft.Office.Interop.Outlook.Inspector insp = oMsg.GetInspector;
                Microsoft.Office.Interop.Word.Document wordEditorDoc = insp.WordEditor;

但是,我不知道如何将文档文本放入我创建的word编辑器对象中。我仍然可以制作一个
wordEditorDoc=doc但结果并不比以前好。

Body属性包含原始文本。一种可能的方法是使用HTMLBody或Word编辑器。我认为最方便的方法是使用Word对象模型在文档(Word现有文档和消息体)之间复制内容。您可能知道,Outlook在Outlook中使用Word作为电子邮件编辑器。因此,您可以使用Word对象模型在Outlook中格式化电子邮件

Inspector类的属性返回表示消息体的文档类(来自Word对象模型)的实例


你可以在MSDN的文章中阅读更多关于可能的方法。

我不知道如何制作word文档的真实副本,即按照我的要求复制整个项目(粗体等)。当你有检查员和word编辑器时,你会怎么做?每次我检查oMsg的HTMLBody时,我都没有看到粗体或斜体部分……你有机会查看我帖子中提到的文章吗?它提供了一个示例代码。无论如何,Outlook不会将UI中所做的更改反映到其对象中。如果要查看更改,则需要保存该项。