【问题标题】:Saving "Device Independent Bitmap" attachment保存“设备独立位图”附件
【发布时间】:2015-06-26 12:16:58
【问题描述】:

如何正确保存这种附件(来自签名邮件)?我用 .SaveAsFile 方法保存了它,但它没有任何扩展名,没有应用程序可以打开它。

Set OutItem = Application.ActiveExplorer.Selection.Item(1)

For Each att In OutItem.Attachments
    att.SaveAsFile "C:\Temp\" & att.DisplayName
Next

【问题讨论】:

  • Attachment.Type 属性的值是多少?是olOLE(6)吗?
  • 是的,它是 olOLE。这种附件怎么保存?
  • 请看下面的答案...

标签: vba outlook


【解决方案1】:

对于 olOlE 附件,您需要将附件作为 IStorage COM 对象打开,并从存储中的一个流中提取数据(可以被破坏) - 您可以在 OutlookSpy 中看到数据:选择消息,单击 OutlookSpy 功能区上的 IMessage 按钮,转到 GetAttachmentTable 选项卡,双击其中一个附件。选择PR)_ATTACH_DATA_OBJ属性,右键,IMAPIProp::OpenProperty,选择IID_IStorage。无法使用 Outlook 对象模型在 VBA 中访问数据

如果使用Redemption 是一个选项,它的RDOAttachment.SaveAsFile 方法足够智能,可以从存储中提取BMP、EMF、PDF、Excel 等文件数据。像下面这样的东西(在我的脑海中)应该可以完成这项工作:

  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set rMsg = Session.GetRDOObjectFromOutlookObject(Application.ActiveExplorer.Selection.Item(1))
  For Each att In rMsg.Attachments
    att.SaveAsFile "C:\Temp\" & att.FileName
  Next

【讨论】:

  • 有效!非常感谢!我知道 Redemption,但我不知道“GetRDOObjectFromOutlookObject”。
【解决方案2】:

Attachment 类的DisplayName 属性返回一个表示名称的字符串,它不需要是实际的文件名,显示在表示嵌入附件的图标下方。

尝试使用FileName 属性,它返回一个表示附件文件名的字符串。

您也可以在代码中明确指定文件扩展名,例如:

For Each att In OutItem.Attachments
 att.SaveAsFile "C:\Temp\" & att.DisplayName & ".docx"
Next

【讨论】:

  • 添加哪个扩展都无所谓,反正它是不可读的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多