Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1504to1508
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Email Text in Excel einlesen

Email Text in Excel einlesen
03.08.2016 13:30:59
Gonzer
Hallo zusammen,
ich möchte aus einem bestimmten Ordner den Inhalt von Emails nach Schlagworten durchsuchen und die Werte hierzu in Excel auslesen.
Ich habe hierzu auch einen Code gefunden der nahezu pefekt klappt - jedoch gibt einige "Felder" die über mehrere Zeilen gehen, also nicht nur der Text direkt dahinter übernommen werden soll, sondern auch der Text der nächsten 3 Zeilen. Hat hierzu jemand eine Lösung?
Und gibt es im Code unten eine elegantere Lösung um als Pattern = und : auszuwählen ohne die Schleife doppelt laufen zu lassen?
Sub ReadOutlookMails()
Dim olApp      As Object   ' das Outlook-Objekt
Dim objFolder  As Object   ' der Standard-Posteingangsordner
Dim objItem    As Object   ' ein Objekt in objFolder
Dim i          As Long     ' Zeilennummer
Dim objRe      As Object   ' ein Regular-Expression Objekt
Dim objRe2     As Object   ' ein Regular-Expression Objekt
Dim objMc      As Object   ' eine MatchCollection, das Ergebnis von objRe.Execute
Dim objMatch   As Object   ' ein Match, d.h. ein Eintrag der Form "irgendwas:sonstwas"
Dim objDic     As Object   ' ein Dictionary-Objekt, Key sind die möglichen Werte vor dem  _
Doppelpunkt, Item ist die Spaltenummer wo das hinsoll
Dim varKey     As Variant  ' ein Key im Dictionary
Dim strKey     As String   ' dito
Set objDic = CreateObject("scripting.dictionary")
i = 1
Cells(1, 1).Value = "Betreff"
For Each varKey In Array("Feld1", "Feld2", "Feld3", "Feld4", "Feld5")
i = i + 1
objDic(varKey) = i
Cells(1, i).Value = varKey
Next
Rows(1).Font.Bold = True
Set objRe = CreateObject("vbscript.regexp")
objRe.Global = True
objRe.MultiLine = True
objRe.Pattern = "^(.*?)=[ \t]*(.*?)[\r\n]?$"
Set objRe2 = CreateObject("vbscript.regexp")
objRe2.Global = True
objRe2.MultiLine = True
objRe2.Pattern = "^(.*?):[ \t]*(.*?)[\r\n]?$"
Set olApp = CreateObject("outlook.application")
Set objFolder = olApp.GetNamespace("MAPI").pickfolder ' Ordnerauswahl
i = 1
For Each objItem In objFolder.Items
If TypeName(objItem) = "MailItem" Then
Set objMc = objRe.Execute(objItem.Body)
If objMc.Count > 0 Then
Cells(i + 1, 1).Value = objItem.Subject
i = i + 1
For Each objMatch In objMc
strKey = objMatch.Submatches(0)
If objDic.Exists(strKey) Then Cells(i, objDic(strKey)) = objMatch.Submatches(1)
Next
End If
End If
Next
i = 1
For Each objItem In objFolder.Items
If TypeName(objItem) = "MailItem" Then
Set objMc = objRe2.Execute(objItem.Body)
If objMc.Count > 0 Then
Cells(i + 1, 1).Value = objItem.Subject
i = i + 1
For Each objMatch In objMc
strKey = objMatch.Submatches(0)
If objDic.Exists(strKey) Then Cells(i, objDic(strKey)) = objMatch.Submatches(1)
Next
End If
End If
Next
objDic.RemoveAll
Set objDic = Nothing
Set objMc = Nothing
Set objRe = Nothing
Set objFolder = Nothing
Set olApp = Nothing
End Sub

Vielen Dank vorab!

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Email Text in Excel einlesen
04.08.2016 02:28:06
Matthias
Hallo! Also mW kannst du die Pattern auch "verknüpfen". Sollte dann so aussehen
("^(.*?):[ \t]*(.*?)[\r\n]?$"|"^(.*?)=[ \t]*(.*?)[\r\n]?$")
Für die mehreren Zeilen müsste man wissen, bei welchen das gilt (also woran man das erkennt). Entweder könnte man dann den pattern anpassen oder du suchst in dir die Zeilen dann schnell selber aus dem body raus. Könnte man ggf. mit split nach dem submatch machen und dann den rechten Teil davon (index 1) nach zeilenumbrüchen splitten und davon die ersten 3 nehmen. Das sollten dann die drei Zeilen nach deinem Treffer sein
VG
AW: Email Text in Excel einlesen
04.08.2016 02:34:24
Matthias
nochmal auf unbeantwortet gesetzt
Anzeige
AW: Email Text in Excel einlesen
04.08.2016 12:23:18
Gonzer
Danke für die Infos.
Wie müsste denn der Code aussehen wenn nur bei Feld1 die nächsten 3 Zeilen übernommen werden sollen und bei allen anderen Feldern die Zeichen dahinter? (so wie es ja auch im Moment funktioniert)
AW: Email Text in Excel einlesen
04.08.2016 22:53:01
Matthias
Hallo! Also theoretisch sollte es so gehen. Kenne jetzt die Mail nicht und der Code am Anfang verwirrt mich leicht. Du liest Feld1 usw. ein und prüfst den Treffer damit ab. In deinem Treffer kommt aber entweder ein : oder = vor. Das fehlt ja bei Feld1. Gehe also davon aus, dass es nur Platzhalter sind. Also probiere es mal so - habe es mit Kommentaren versehen. VG
If Cells(1, 1) = objMatch.Submatches(0) Then 'in A1 steht ja dein Feld1, prüfen mit dem Treffer
'EmAiltest auswählen
inhalt = objItem.Body
'splitten nach dem Begriff Feld1, gibt dann 2 Teile links davon mit Index 0 und
' rechts davon mit Index1
'wir brauchen den rechten
temp = Split(inhalt, Cells(1, 1))
'in dem rechten jetzt nach Zeilenumbrüchen splitten
temp2 = Split(temp(1), vbCrLf)
'prüfen, ob es mindestens 3 Zeilen gab
'wenn ja, nehmen wir die ersten 3 Zeilen , Index ist 0, 1, 2
If UBound(temp2) > 1 Then anhang = temp(0) & temp(1) & temp(2)
'in Anhang sollten jetzt die 3 Zeilen sein
End If

Anzeige
AW: Email Text in Excel einlesen
04.08.2016 22:53:19
Matthias
Hallo! Also theoretisch sollte es so gehen. Kenne jetzt die Mail nicht und der Code am Anfang verwirrt mich leicht. Du liest Feld1 usw. ein und prüfst den Treffer damit ab. In deinem Treffer kommt aber entweder ein : oder = vor. Das fehlt ja bei Feld1. Gehe also davon aus, dass es nur Platzhalter sind. Also probiere es mal so - habe es mit Kommentaren versehen. VG
If Cells(1, 1) = objMatch.Submatches(0) Then 'in A1 steht ja dein Feld1, prüfen mit dem Treffer
'EmAiltest auswählen
inhalt = objItem.Body
'splitten nach dem Begriff Feld1, gibt dann 2 Teile links davon mit Index 0 und
' rechts davon mit Index1
'wir brauchen den rechten
temp = Split(inhalt, Cells(1, 1))
'in dem rechten jetzt nach Zeilenumbrüchen splitten
temp2 = Split(temp(1), vbCrLf)
'prüfen, ob es mindestens 3 Zeilen gab
'wenn ja, nehmen wir die ersten 3 Zeilen , Index ist 0, 1, 2
If UBound(temp2) > 1 Then anhang = temp(0) & temp(1) & temp(2)
'in Anhang sollten jetzt die 3 Zeilen sein
End If

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige