我在lotusscript代理中有以下代码,用于从NotesDocuments中删除附件。但NotesDocument.save()会导致丢失富文本格式(字体,颜色)。有没有办法保留格式?
Sub removeAttachments_v2(doc As NotesDocument)
Dim session As NotesSession
Dim rtitem As Variant
Dim filename As String
Dim ans As Variant
Set session = New NotesSession
Dim richstyle As NotesRichTextStyle
Set richstyle = session.CreateRichTextStyle
richstyle.NotesColor = COLOR_BLUE
If doc.HasEmbedded Then
Set rtitem = doc.getfirstitem("Body")
If (rtitem.type = RICHTEXT) Then
ForAll object In rtitem.EmbeddedObjects
If (object.Type = EMBED_ATTACHMENT) Then
filename = object.source
Call object.remove
Call rtitem.AddNewLine( 2 )
Call rtitem.AppendStyle(richstyle)
Call rtitem.AppendText( "Attachemnt removed: " & filename )
Call doc.Save( True, True , True )
End If
End ForAll
End If
End If
End sub
Edit1:初始化功能
Sub Initialize
Dim db As New NotesDatabase("","")
Dim col As NotesDocumentCollection
Dim doc As NotesDocument
Call db.Open("", "C:\this\is\db\dir\test.nsf")
Set col = db.Alldocuments
Set doc = col.Getfirstdocument()
While Not ( doc Is Nothing )
Call RemoveAttachments_v2(doc)
Call doc.Save(False, False, False)
Set doc = col.GetNextDocument( doc )
Wend
End Sub
答案 0 :(得分:0)
尽管事实上,您为每个附件保存文档但我找不到任何理由,为什么会发生这种情况。我刚刚在代理中复制了您的代码,并根据需要删除了附件,并将文本附加为蓝色...
没有格式化丢失......
错误必须在代码中的其他位置,可能在调用函数中。
OLD ANSWER(由于自己的测试错误,只是保留在历史记录中):
这里的问题很可能是:你将rtitem定义为Variant。和 getfirstitem为您提供NotesItem而不是NotesRichtextItem,所以 保存时,它会转换为"纯文本"项目。
很可能你使用的是Variant而不是NotesRichtextItem,因为 有Mime- mails将变量定义为NotesRichtextItem 将导致"类型不匹配"或类似的错误。只要你不这样做 什么都写回来这没关系。
由于Mime Mails需要完成不同的处理以实现您的目标, 你应该首先使用。修复纯NotesRichtextItems的代码 正确的类型,然后编写另一个代码分支来处理Mime- 项目