这确实是一种错误,但是如此古老以至于“这就是Notes的行为方式”。如果你有几个同名的项目,你总是得到第一个。
然而,NotesDocument中的正常附件嵌入在富文本项中,因此您可以循环使用rt项并获取附件。如果是这样的代码应该这样做:
ForAll i In doc.Items
If i.Type = RICHTEXT Then
Print "rt item:", i.Name
If Not IsEmpty(i.EmbeddedObjects) Then
If ( i.Type = RICHTEXT ) Then
ForAll o In i.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
If dir(sPath & o.Name)<>"" Then Kill sPath & o.Name
Print sPath & o.Name
Call o.ExtractFile(sPath & o.Name)
End If
End ForAll
End If
End If
End If
End ForAll
对于它们不是富文本项(直接附加到文档)的情况,我认为代码应该类似:
If Not IsEmpty(doc.Embeddedobjects) Then
ForAll o1 In doc.Embeddedobjects
If ( o1.Type = EMBED_ATTACHMENT ) Then
'Set o = obj2
If Dir(sPath & o1.Name)<>"" Then Kill sPath & o1.Name
Print "doc>", sPath & o1.Name
Call o1.ExtractFile(sPath & o1.Name)
End If
End ForAll
End If
然而,我只是测试了这段代码并且惊讶地发现它没有拿起任何附件(甚至文件中也没有OLE对象)我想知道是否有人对此有评论 - 我很确定它的工作状态良好过去的日子?
进一步调查 - 适用于项目和直接嵌入项目的解决方案是:
dim names, obj
names = Evaluate("@AttachmentNames", doc)
ForAll aname In names
Set obj = doc.Getattachment(aname)
Print "any>", sPath & obj.Name
Call obj.ExtractFile(sPath & obj.Name)
End ForAll
在所有情况下都有一个限制 - 如果您有几个相同的命名附件,您将只有一个“正确”名称,所有其他名称将使用内部生成的名称。我不知道一个更好的解决方案,而不是下载到C API来获取此信息。