我使用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
属性,可用于检查其中是否存在附件。
这会有什么办法?
答案 0 :(得分:3)
请改为尝试:
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
您可能还想将冗余逻辑提取到子例程中。
答案 1 :(得分:2)
如果你想要提取文件的所有附件,这是一个简短的代码,无论它们存储在何处:
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
答案 2 :(得分:1)
更新回答
不是直接在EmbeddedObjects
中访问forall
属性,而是将其分配给variant
并首先检查它,使用TypeName
函数确保返回value实际上是一个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