通过VBA读取Lotus Notes文档中的字段

时间:2017-05-24 15:25:43

标签: vba lotus-notes

我正在尝试编写将从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而是改为。

感谢任何帮助。

2 个答案:

答案 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客户端崩溃。