Прочтите содержимое вложения электронной почты в Excel - PullRequest
0 голосов
/ 19 июня 2020

Я получаю свои журналы заданий на электронную почту Outlook, где тема содержит большую часть необходимой информации, например, какое задание, какой день, какой сервер и статус. Я использовал Date в качестве параметра для получения электронного письма в Excel.

Я пытаюсь продолжить. Если задание не выполняется, создайте журнал либо в теле письма, либо в виде вложения к нему.

Для журнала в теле письма я перенес их на лист, проанализировал с поисковым запросом «Ошибка» и зафиксировал строка.

Для вложения я могу только сохранить его в папке и получить имя в Excel. Можно ли как-нибудь прочитать содержимое вложения, найти «Ошибка» и вывести только эту строку на лист Excel.

Option Explicit
Const AttachmentPath As String = "C:\users\maharaj\qalogs\"

Sub GetFromOutlook2()
Dim outlookAtch As Object
Dim NewFileName As String
NewFileName = AttachmentPath & Format(Date, "DD-MM-YYYY") & "-"
Dim OutlookApp As Outlook.Application
Dim OutlookNamespace As Namespace
Dim Folder As MAPIFolder
Dim OutlookMail As Variant
Dim i As Integer
Set OutlookApp = New Outlook.Application
Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")
Set Folder = OutlookNamespace.GetDefaultFolder(olFolderInbox).Folders("QALOGS")

i = 1

For Each OutlookMail In Folder.Items
    If OutlookMail.ReceivedTime "GREATER THAN or EQUAL TO" = Range("start_Date").Value Then
        Range("email_Subject").Offset(i, 0).Value = OutlookMail.Subject
        Range("email_Date").Offset(i, 0).Value = OutlookMail.ReceivedTime
        Range("email_Sender").Offset(i, 0).Value = OutlookMail.SenderName
        Range("email_Body").Offset(i, 0).Value = OutlookMail.Body
        outlookAtch.SaveAsFile NewFileName & outlookAtch.Filename
        Range("email_attachment").Offset(i, 0).Value = outlookAtch
    End If
    i = i + 1
Next OutlookMail

Set Folder = Nothing
Set OutlookNamespace = Nothing
Set OutlookApp = Nothing

End Sub 

1 Ответ

0 голосов
/ 20 июня 2020

Прежде всего, я бы рекомендовал использовать методы Restrict или Find / FindNext класса Items вместо перебора всех элементов в папке:

For Each OutlookMail In Folder.Items
           If OutlookMail.ReceivedTime "GREATER THAN or EQUAL TO" = Range("start_Date").Value Then

Дополнительные сведения об этих методах см. В следующих статьях:

Кроме того, вы можете рассмотреть возможность использования метода AdvancedSearch Application класс. Ключевые преимущества использования метода AdvancedSearch в Outlook:

  • Поиск выполняется в другом потоке. Вам не нужно запускать другой поток вручную, поскольку метод AdvancedSearch запускает его автоматически в фоновом режиме.
  • Возможность поиска любых типов элементов: почта, встреча, календарь, заметки и c. в любом месте, т.е. за пределами определенной папки. Методы Restrict и Find / FindNext могут быть применены к определенной коллекции Items (см. Свойство Items класса Folder в Outlook).
  • Полная поддержка запросов DASL (настраиваемые свойства можно использовать и для поиска). Подробнее об этом можно прочитать в статье Фильтрация в MSDN. Чтобы повысить эффективность поиска, можно использовать ключевые слова мгновенного поиска, если для магазина включен мгновенный поиск (см. Свойство IsInstantSearchEnabled класса Store).
  • Вы можете остановить процесс поиска в любой момент, используя Остановить метод класса поиска.

Для вложения я могу только сохранить их в папке и дать им имя в Excel.

Да, вы на правильном пути. Прикрепленный файл сначала нужно сохранить на диске. В зависимости от расширения файла вы можете автоматизировать соответствующее приложение для чтения его содержимого или просто использовать операции ввода-вывода для чтения содержимого напрямую, без участия приложений Office.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...