VSTO Outlook插件VB.Net -统计主题中id实例的锯齿数组



所以我对VB比较陌生,一般来说,我很喜欢这方面的技巧,但是我正在为Outlook创建一个VSTO插件,用于少数用户修改的电子邮件收件箱。我遇到的问题是其中一个为报告目的而设计的按钮。

当电子邮件被用户拾取时,我有一个按钮,可以修改主题行,在主题行后面附加"action_userid - date&time -"。用户ID总是7个字符。我想做的是遍历所有选定的电子邮件,从该主题行获取用户id,并创建一个数组,该数组显示每个用户已操作的电子邮件总数。

数组的输出应该是userid count的格式。获取userid很简单,因为它总是在主题行的相同位置。

我有它的工作在一个基本的测试形式通过创建一个字符串与所有的用户id,然后通过它迭代(忽略Do While Count,这只是为了测试),但我想改变它是更简单的数组内。

    For Each MItem In oSel
        If InStr(MItem.Subject, "Duplicate - ") Then
            dupeCount = dupeCount + 1
        End If
        If InStr(MItem.Subject, "Actioned - ") Then
            emailUser = Left(Mid(MItem.Subject, (InStr(MItem.Subject, "Actioned - ") + 11)), 7)
            userArray = userArray & " " & emailUser
            emailCount = emailCount + 1
        Else
            NoID = NoID + 1
        End If
    Next MItem
    Do While Count > 0
        If Len(userArray) > 2 Then
            arrayUser = Left(userArray, 8)
            userCount = (Len(userArray) - Len(Replace(userArray, arrayUser, ""))) / Len(arrayUser)
            markedCount = markedCount + userCount
            msgStr = msgStr & arrayUser & ": " & userCount & " | "
        End If
        If InStr(userArray, arrayUser) Then
            userArray = Replace(userArray, arrayUser, "")
        End If
        If userArray = vbNullString Then
            Count = 0
            GoTo CompileEmail
        End If
    Loop

我该怎么做呢,我想应该是这样的:

 If InStr(MItem.Subject, "Actioned - ") Then
        emailUser = Left(Mid(MItem.Subject, (InStr(MItem.Subject, "Actioned - ") + 11)), 7)
        If userArray.Contains(emailUser) Then
                userLoc = Array.IndexOf(userArray, emailUser)
                '' Get jagged array details at userLoc
                '' Modify jagged array to iterate count for that userid by 1
                '' Place modified jagged array back in userArray

在这一点上我有点困惑如何创建/操作一个数组来产生这个结果

我对Outlook不太熟悉,所以希望有更有经验的人来回答这个问题,但我可以给你一个提示。

MItem有很多对用户不可见的属性,但它们是对象(MailItem)的重要组成部分,如BillingInformation字段(或任何其他不显示给用户的字段)

当你更新主题行

时你可以这样做
mItem.BillingInformation = "JohnSmith"
mItem.Save

上面的代码将用户JohnSmith添加到名为BillingInformation的字段并保存邮件。稍后,当您想要创建用户报告时,只需过滤所有邮件项

Dim ns As NameSpace
Dim fd As Outlook.Folder
ns = Application.GetNamespace("MAPI")
fd = ns.GetDefaultFolder(olFolderInbox)
Dim mItems As Outlook.Items
mItems = fd.Items
Dim filtered As Outlook.Items
filtered = mItems.Restrict("[BillingInformation] = 'JohnSmith'")
Dim mItem As Outlook.MailItem
For i as Integer = 1 To filtered.Count
    mItem = mItems(i)
    Debug.Print mItem.Subject
Next i

最新更新