我正在尝试编写将从Lotus Notes文档中的字段读取数据的VBA代码。目前,我可以使用FieldGetText
方法读取数据,但这仅在我打开文档时才有效。我需要能够在不打开文档的情况下遍历文档,因为有几百个。我需要能够从许多文档中读取这些相同的字段,但无法弄清楚如何循环它们。我的代码目前是:
Set LotusNotes = CreateObject("Notes.NotesUiWorkspace")
Set CurrentDoc = LotusNotes.CurrentDocument
While Not (CurrentDoc Is Nothing)
' Affectation of data
DueDate = CurrentDoc.FieldGetText("RevDueDate")
DueTime = CurrentDoc.FieldGetText("RevDueTime")
DateClosed = CurrentDoc.FieldGetText("DateClosed")
Wend
据我所知,这使用了前端对象。我能够使用可以循环文档的Back End对象(不打开它们),但是数据(特别是日期)与文档中的字段文本不匹配。该代码看起来像这样:
Set LotusNotes = CreateObject("Notes.NotesSession")
Set db = LotusNotes.GetDatabase("")
Set view = db.GetView(view_name)
view.AutoUpdate = False
Set columnview = view.AllEntries
Set doc = view.GetFirstDocument
While Not (doc Is Nothing)
revDate = doc.GetItemValueDateTimeArray("RevDueDate")
revDate = doc.RevDueDate
Set doc = view.GetNextDocument(doc)
Wend
基本上,我只是想知道是否可以使用我先尝试的NotesUIWorkspace
类来循环浏览多个文件,或者是否可以在FieldGetText
中以某种方式使用NotesWorkspace
而是改为。
感谢任何帮助。
答案 0 :(得分:1)
您正在使用以Notes.NotesUIWorkspace为根的Notes“前端”类。这些是OLE类,这意味着它们需要Notes客户端运行并且它们在打开的文档上工作。还有一些以Notes.NotesSession为根的后端类。这些也是OLE类,因此它们仍然需要运行Notes客户端,但是它们可以访问其他文档(以及其他数据库,服务器等)。还有一组以Lotus.NotesSession为根的后端类。请注意不同的前缀。这些是COM类,因此它们不需要运行Notes客户端 - 虽然它必须安装和配置,并且您的代码必须提供用户的密码,因为客户端不会提示它。
您可以找到NotesSession类h ere的文档和示例。在页面底部附近,您可以找到有关通过OLE或COM使用它们的信息的链接。您可以在使用COM类here的基础上找到一堆示例,包括遍历数据库视图中的文档的示例。除了会话的初始设置,如果使用OLE,它将是相同的。
答案 1 :(得分:0)
使用'后端'是可能的,也是更好的选择。对象Notes.NotesSession
。所以试试这个:
Set doc = view.GetFirstDocument
While Not (doc Is Nothing)
'Check if you have the field in the document
if doc.HasItem("RevDueDate") Then
revDate = doc.getFirstItem("RevDueDate").Text
End If
Set doc = view.GetNextDocument(doc)
Wend
也可以通过打开客户端中的每个文档,获取字段数据并关闭文档来使用Notes.NotesUiWorkspace
对象,但我强烈建议不要使其像这样如果您需要循环访问更多文档,则很可能会导致Notes客户端崩溃。