我使用LotusScript文档中提取附件用户的本地机器上。 该文件有两个富文本字段Body1
和Body2
和很多时候只有一个拥有它的附件。 我使用下面的代码片段:
Dim doc As NotesDocument
Dim richTextItem As NotesRichTextItem
.....
.....
If doc.Hasembedded Then
Set richTextItem = doc.Getfirstitem("Body1")
ForAll o In richTextItem.Embeddedobjects
Call o.ExtractFile(dirName + "\" + o.Name)
End ForAll
Set richTextItem = doc.Getfirstitem("Body2")
ForAll o In richTextItem.Embeddedobjects
Call o.ExtractFile(dirName + "\" + o.Name)
End ForAll
End If
问题是,如果Body1
没有附着在它和Body2
的话那么上面的代码中抛出的错误Type mismatch
的声明ForAll o In richTextItem.Embeddedobjects
,反之亦然,因为有在富文本项目没有嵌入的对象。 此外doc.Embeddedobjects
不起作用,因为附件是本富文本里面的物品。 而NotesRichTextItem
类没有Hasembedded
它可以用于检查它的附件存在性能。
这将是一个出路呢?
试试这个:
Dim doc As NotesDocument
.....
.....
If doc.Hasembedded Then
Set richTextItem = doc.Getfirstitem("Body1")
Set rtnav = richTextItem.CreateNavigator
If rtnav.FindFirstElement(RTELEM_TYPE_FILEATTACHMENT) Then
Do
Set att = rtnav.GetElement()
filepath$ = dirName + "\" + att.Source
Call att.ExtractFile(filepath$)
Loop While rtnav.FindNextElement()
End If
Set richTextItem = doc.Getfirstitem("Body2")
Set rtnav = richTextItem.CreateNavigator
If rtnav.FindFirstElement(RTELEM_TYPE_FILEATTACHMENT) Then
Do
Set att = rtnav.GetElement()
filepath$ = dirName + "\" + att.Source
Call att.ExtractFile(filepath$)
Loop While rtnav.FindNextElement()
End If
End If
您可能还需要冗余的逻辑提取到一个子程序。
这是一个简短的代码,如果你想不管提取文档中所有附件的存储位置:
Dim vAttachmentList As Variant
vAttachmentList = Evaluate("@AttachmentNames", doc)
If vAttachmentList(0) <> "" then
ForAll sAttachmentName In vAttachmentList
Call doc.Getattachment(sAttachmentName).ExtractFile(dirName + "\" + sAttachmentName)
End ForAll
End if
更新答案
而不是访问EmbeddedObjects
直接在财产forall
,将其分配给一个variant
,并首先检查它使用TypeName
函数以确保返回值是真正的数组NotesEmbeddedObject
对象,就像这样:
dim objectArray as variant
If doc.Hasembedded Then
Set richTextItem = doc.Getfirstitem("Body1")
Set objectArray = richTextItem.Embeddedobjects
If TypeName(objectArray) = "NOTESEMBEDDEDOBJECT( )" Then
ForAll o In objectArray
Call o.ExtractFile(dirName + "\" + o.Name)
End ForAll
End If
End If