Daten (Tabelle) aus E-Mail nach Excel übertragen
Hallo zusammen,
ich bin leider nur ein Endanwender und benötige eure fachkräftige Hilfe.
Täglich erhalte ich mehere Mails mit einer identisch aufgebauten Tabelle, aber unterschiedlich gefüllt.
Beispiel:
Absender: identisch bei allen Mails
Betreff: unterschiedlich - 3 verschiedene Varianten, es ist aber immer das Wort "Verarbeitung" enthalten
Datum Datei Verarbeitungstag Art Dateiname Gesamt Positionen Klärfälle Status Betrag
10.01.2017 11.01.2017 Eingang XXXP00 1135 33 erledigt 111111,11
10.01.2017 11.01.2017 Eingang XXXP01 1135 12 erledigt
10.01.2017 11.01.2017 Eingang XXXP02 1133 34 erledigt
10.01.2017 11.01.2017 Eingang ZZZR0 1 0 erledigt 11,11
10.01.2017 11.01.2017 Ausgang CCCR0 393 0 erledigt 2222,22
10.01.2017 11.01.2017 Eingang WWWP0 2 1 erledigt 99,99
10.01.2017 11.01.2017 Sonstige SSSP0 1137 7 erledigt 66666,66
Ich hätte gern die Tabelle identisch in Excel an eine bereits bestehende Datei angefügt.
Das Anfügen sollte dann je nach Betreff in der korrekten Registerkarte erfolgen.
Das heißt ist der Betreff "rote Verarbeitung" dann in die Registerkarte "rot", ist der Betreff "blaue Verarbeitung"
dann in die Registerkarte "blau" usw.
Ich gehe davon aus, dass dies über VBA per Script möglich ist.
Im Forum habe ich mir auch schon 2 Varianten angesehen, aber da waren es immer andere Sachverhalte und
ich weiß leider nicht, wie ich den Code korrekt anpassen müsste.
Beispiel:
EMail auslesen, verschieben und mit Excel ausgelesene Daten weiterverarbeiten
Vielen Dank im voraus!
ich bin leider nur ein Endanwender und benötige eure fachkräftige Hilfe.
Täglich erhalte ich mehere Mails mit einer identisch aufgebauten Tabelle, aber unterschiedlich gefüllt.
Beispiel:
Absender: identisch bei allen Mails
Betreff: unterschiedlich - 3 verschiedene Varianten, es ist aber immer das Wort "Verarbeitung" enthalten
Datum Datei Verarbeitungstag Art Dateiname Gesamt Positionen Klärfälle Status Betrag
10.01.2017 11.01.2017 Eingang XXXP00 1135 33 erledigt 111111,11
10.01.2017 11.01.2017 Eingang XXXP01 1135 12 erledigt
10.01.2017 11.01.2017 Eingang XXXP02 1133 34 erledigt
10.01.2017 11.01.2017 Eingang ZZZR0 1 0 erledigt 11,11
10.01.2017 11.01.2017 Ausgang CCCR0 393 0 erledigt 2222,22
10.01.2017 11.01.2017 Eingang WWWP0 2 1 erledigt 99,99
10.01.2017 11.01.2017 Sonstige SSSP0 1137 7 erledigt 66666,66
Ich hätte gern die Tabelle identisch in Excel an eine bereits bestehende Datei angefügt.
Das Anfügen sollte dann je nach Betreff in der korrekten Registerkarte erfolgen.
Das heißt ist der Betreff "rote Verarbeitung" dann in die Registerkarte "rot", ist der Betreff "blaue Verarbeitung"
dann in die Registerkarte "blau" usw.
Ich gehe davon aus, dass dies über VBA per Script möglich ist.
Im Forum habe ich mir auch schon 2 Varianten angesehen, aber da waren es immer andere Sachverhalte und
ich weiß leider nicht, wie ich den Code korrekt anpassen müsste.
Beispiel:
EMail auslesen, verschieben und mit Excel ausgelesene Daten weiterverarbeiten
Vielen Dank im voraus!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 326051
Url: https://administrator.de/contentid/326051
Ausgedruckt am: 16.11.2024 um 19:11 Uhr
6 Kommentare
Neuester Kommentar
Ich hätte gern die Tabelle identisch in Excel
Ich hätte gern ne Tasse Kaffee X-), was zahlst du uns für diese Auftragsarbeit?Gruß
Dann wünsche ich dir viel Erfolg, gebe dem aber wenig Chancen das das hier jemand für lau macht, ist ja auch deine Arbeitszeit die du dann in Zukunft sparst. Du würdest aber allen die hier helfen wollen erst mal damit helfen wenn du folgende Informationen in Code-Tags gefasst hier posten würdest, denn so kann man mit deiner unformatierten Tabelle hier niemand was anfangen, denn zum Extrahieren der Daten sind detaillierte Quelltexte der Mails nötig.:
Gruß mik
- Kommt die Mail als HTML oder Plaintext?
- Wenn HTML dann poste den HTML-Code der Mail, wenn Text ebenfalls den Text aber auch in Codetags.
- Vokommende Betreff Varianten.
- Aufbau der Excel-Datei
Gruß mik
Hallo Jens, Willkommen auf Administrator.de!
ich habe mir mal alles durchgelesen und dir mal ein Makro mit den von dir bereitgestellten Daten dafür zusammengestellt. Ich gehe davon aus das die Sheets in Excel exakt folgendermaßen lauten:
"Blaue Verarbeitung", "Rote Verarbeitung","Businessverarbeitung".
Zusätzlich gehe ich davon aus das die Tabellenaufteilung bei allen Mails vor und nach den reinen Daten gleich bleibt wie in deiner HTML-Source.
Du gehst nun folgendermaßen vor:
Nun kannst du die Regel ausführen. Es gibt hier kein visuelles Feedback. Es wird alles im Hintergrund verarbeitet, die Daten extrahiert und an dein Sheet in der nächsten freien Zeile angehängt.
Für weiteren Support kannst du mich gerne per PM in Anspruch nehmen (gegen Aufwandsentschädigung).
Viel Erfolg
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
ich habe mir mal alles durchgelesen und dir mal ein Makro mit den von dir bereitgestellten Daten dafür zusammengestellt. Ich gehe davon aus das die Sheets in Excel exakt folgendermaßen lauten:
"Blaue Verarbeitung", "Rote Verarbeitung","Businessverarbeitung".
Zusätzlich gehe ich davon aus das die Tabellenaufteilung bei allen Mails vor und nach den reinen Daten gleich bleibt wie in deiner HTML-Source.
Du gehst nun folgendermaßen vor:
- Du kopierst folgenden Code in den VBA-Editor (ALT-F11) in ThisOutlookSession bzw. DieseOutlookSitzung.
- Dann erstellst du eine Regel für die gewünschten Mails mit den 3 Betreff-Varianten, und gibst unter Aktionen an ein Skript ausführen und wählst dort das angelegte Makro aus.
- ACHTUNG: Wenn du noch nie mit Makros in Outlook gearbeitet hast musst du Makros im Sicherheitscenter von Outlook erst noch freischalten und dann einen Neustart von Outlook machen!!
- Im Code gibst du in der Konstanten EXCELSHEET den Pfad zu deiner Excel-Mappe an in der die Tabs und die Überschriften schon angelegt sind. Ich gehe hier davon aus das die erste Spalte Spalte A ist.
Nun kannst du die Regel ausführen. Es gibt hier kein visuelles Feedback. Es wird alles im Hintergrund verarbeitet, die Daten extrahiert und an dein Sheet in der nächsten freien Zeile angehängt.
Public Sub ExtractTableDataToExcel(itm As MailItem)
'Pfad zur Excel-Mappe
Const EXCELSHEET = "c:\kaiuwe\daten.xlsx"
'Variablen
Dim strContent As String, oDom As Object, arr() As Variant, strSheetname As String, wb As Object, r As Integer, c As Integer, intStart As Integer, intEnd As Integer
'benötigte Objekte erstellen
Set oDom = CreateObject("htmlfile")
Set objExcel = CreateObject("Excel.Application")
Set regex = CreateObject("vbscript.regexp"): regex.IgnoreCase = True
'Öffne Excel-Mappe
objExcel.DisplayAlerts = False
Set wb = objExcel.Workbooks.Open(EXCELSHEET)
'objExcel.Visible = True
'Betreff ermitteln (für Zuordnung von Name zu den Tabs "Blaue Verarbeitung","Rote Verarbeitung","Businessverarbeitung")
regex.Pattern = "(Blaue Verarbeitung|Rote Verarbeitung|Businessverarbeitung)"
Set matches = regex.Execute(itm.SUBJECT)
If matches.Count > 0 Then
strSheetname = matches(0)
Else
MsgBox "Kein passender Betreff wurde gefunden der eine Zuordnung zu den Tabellen zulässt!", vbExclamation, "Fehler"
GoTo CloseWorkbook
End If
'HTML Tabellendaten in zweidimensionales Excel-Array einlesen
oDom.Write itm.HTMLBody
With oDom.getElementsByTagName("table")(0)
'Prüfe auf ein Datum in der ersten Zelle um den Anfang der Datenzeilen zu erkennen
regex.Pattern = "^\d{2}\.\d{2}\.\d{4}$"
For i = 0 To .Rows.Length - 1
'Wenn Datum erkannt wurde
If regex.Test(Trim(.Rows(i).Cells(0).innerText)) Then
If intStart = 0 Then
'Startzeile wurde noch nicht gesetzt
intStart = i
Else
'Endzeile setzen wenn Startzeile schon gesetzt wurde
intEnd = i
End If
End If
Next
'Ändere Größe des Arrays passend der Anzahl Zeilen und Spalten
ReDim arr(0 To (intEnd - intStart), 0 To 7)
'Durchlaufe nur die Datenzeilen und schreibe die Zelldaten ins Array
For r = intStart To intEnd
For c = 0 To 7
arr(r - intStart, c) = Trim(.Rows(r).Cells(c).innerText)
Next
Next
End With
'Daten in nächste freie Zelle schreiben
With wb.Worksheets(strSheetname)
.Cells(.Rows.Count, "A").End(-4162).Offset(1, 0).Resize(UBound(arr, 1) + 1, UBound(arr, 2) + 1).Value = arr
End With
CloseWorkbook:
'Workbook speichern
wb.Save
wb.Close True
objExcel.DisplayAlerts = True
objExcel.Quit
'Cleanup
Set regex = Nothing
Set objExcel = Nothing
Set oDom = Nothing
End Sub
Für weiteren Support kannst du mich gerne per PM in Anspruch nehmen (gegen Aufwandsentschädigung).
Viel Erfolg
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate