如何获取Outlook中olItem.Class=olDocument对象的正文?
解决Outlook中olDocument对象正文获取问题
问题根源
olDocument对应的是Outlook文档项(DocumentItem对象),这类对象和普通邮件项(MailItem)属性结构不同:没有HTMLBody属性,且Body属性为空是因为它的内容实际封装在内嵌的OLE对象中,并非直接存储在Body字段里。
可行解决方案
方法1:提取内嵌OLE对象读取内容
通过Attachments集合获取DocumentItem内嵌的OLE对象,保存为临时文件后读取内容(以Word文档为例):
Sub GetDocumentItemContent() Dim olNS As Namespace Dim olInboxFolder As MAPIFolder Dim olItem As Variant Dim tempPath As String tempPath = Environ("TEMP") & "\temp_doc_content.doc" '临时文件路径 Set olNS = GetNamespace("MAPI") Set olInboxFolder = olNS.PickFolder For Each olItem In olInboxFolder.Items If olItem.Class = olDocument Then '匹配Class=41的文档项 '保存第一个内嵌附件(即文档内容载体) olItem.Attachments(1).SaveAsFile tempPath '调用Word读取临时文件内容 Dim wordApp As Object Dim doc As Object Set wordApp = CreateObject("Word.Application") Set doc = wordApp.Documents.Open(tempPath) Debug.Print doc.Content.Text '输出文档正文 doc.Close False wordApp.Quit Kill tempPath '清理临时文件 End If Next olItem Set olInboxFolder = Nothing Set olNS = Nothing End Sub
方法2:正确使用SaveAs保存文档项
若要保存DocumentItem,需指定对应文件格式常量,同时确保目标路径有写入权限:
'示例:保存为Word文档格式 olItem.SaveAs "C:\你有权限的路径\saved_document.doc", olDoc 'olDoc对应常量值为0
原代码修正要点
- 无需通过
olItems(i)索引调用属性,直接使用循环中的olItem对象即可,避免索引偏移问题 - 不要尝试调用DocumentItem不存在的
HTMLBody属性,会触发"对象不支持该属性或方法"错误
内容的提问来源于stack exchange,提问作者BMoore
相关产品推荐
相关产品推荐

