Как извлечь имя из подписи в письмах Outlook? - PullRequest
0 голосов
/ 31 марта 2020

Мой проект заключается в извлечении сведений («Идентификатор беседы», «Дата создания», «Отправитель», «Имя отправителя», «Электронная почта отправителя», «Тема», «Кому», «Получатели», «»). Идентификатор записи ") элементов электронной почты из выбранной папки Outlook (например, AB C Services) и создайте базу данных Excel. Я успешно извлек это же в электронную таблицу Excel.

У меня проблема с получением имени из подписи для каждого из элементов электронной почты.

Моя команда ежедневно проверяет почту от папка Outlook (например: AB C Services) и ответы с общим идентификатором почты отправителя (например: ABC@xxx.com) с соответствующими подписями (зависит от отправителя, например: Vinay MG, Povel A, James Car et c. ) в теле письма.

Я хочу извлечь имя отправителя из подписи. Я узнал о «Предлагаем подписчике» с сайта MS Office, но мало что понял. Также я искал много сайтов, но безуспешно.

Моя электронная почта течет, как показано ниже,

[..... ..... EMail BODY ... ... . ...]
С уважением,
Vinay MG | AB C Услуги | EFG Team
XXX Company, Location
Моб: xx-xxxxx xxxxx

Я хочу извлечь имя (Vinay MG) из подписи.

1 Ответ

0 голосов
/ 24 апреля 2020

Текст можно анализировать вне тела.

Option Explicit

Sub parseBodyForText()

    ' Test this sample code in Outlook not Excel

    ' Where mail contains a line in this format
    '  name | ABC Services | EFG Team

    Dim myItem As Object
    Dim bodyLines() As String
    Dim namelineWords() As String
    Dim i As Long

    ' Open applicable mail
    Set myItem = ActiveInspector.CurrentItem

    If myItem.Class = olMail Then

        bodyLines = Split(myItem.Body, vbCrLf)

        For i = LBound(bodyLines) To UBound(bodyLines)

            ' Attempt to determine the applicable line

            'If Right(bodyLines(i), 10) = "| EFG Team" Then
            ' or
            'If InStr(bodyLines(i), "| ABC Services |") Then

            ' If the above strings are not always present.
            ' Perhaps search for the "|"
            ' Increases chance of false positives
            If InStr(bodyLines(i), " | ") Then

                Debug.Print "nameline: " & bodyLines(i)

                namelineWords = Split(bodyLines(i), "|")
                Debug.Print "first element of namelineWords array: " & namelineWords(0)

                ' Assumes no false positives
                Exit For

            End If

        Next

    End If

End Sub
...