mit Excel VBA Email-HTML-Tabelle auslesen

chef1568

Cadet 3rd Year
Registriert
Feb. 2012
Beiträge
38
Hallo,

ich möchte eine in einer Email eingebundenen HTML-Tabelle auslesen und in einen Array speichern.
Hierzu habe ich bereits den gesamten Inhalt der Email als string in einer Variable gespeichert.
Nun habe ich aber das Problem die Tabelle und die Informationen daraus herauszufiltern.

Ich benötige die Inhalte der Zellen eigentlich 1:1 in einem Array - bei XML ging das leichter.

Code:
<table width="1965" style="width:1179pt;margin-left:1.9pt;">
	<col width="116" style="width:69.8pt;"><col width="805" style="width:483.1pt;"><col width="123" style="width:73.8pt;"><col width="143" style="width:86.1pt;"><col width="131" style="width:78.8pt;"><col width="129" style="width:77.8pt;"><col width="39" style="width:23.8pt;"><col width="476" style="width:285.8pt;">
	<tbody>
	<tr height="25" style="height:15pt;">
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">Stand</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">28.08.14</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;"></span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;"></span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;"></span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;"></span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;"></span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;"></span></font></td>
	</tr>
	<tr height="25" style="height:15pt;">
		<td style="background-color:#BFBFBF;"><font face="Calibri" size="2"><span style="font-size:11pt;background-color:#BFBFBF;">Fahrzeug</span></font></td>
		<td style="background-color:#BFBFBF;"><font face="Calibri" size="2"><span style="font-size:11pt;background-color:#BFBFBF;">Kommentar</span></font></td>
		<td style="background-color:#BFBFBF;"><font face="Calibri" size="2"><span style="font-size:11pt;background-color:#BFBFBF;">Typ</span></font></td>
		<td style="background-color:#BFBFBF;"><font face="Calibri" size="2"><span style="font-size:11pt;background-color:#BFBFBF;">Verantwortlich</span></font></td>
		<td style="background-color:#BFBFBF;"><font face="Calibri" size="2"><span style="font-size:11pt;background-color:#BFBFBF;">Status</span></font></td>
		<td style="background-color:#BFBFBF;"><font face="Calibri" size="2"><span style="font-size:11pt;background-color:#BFBFBF;">Zieltermin</span></font></td>
		<td style="background-color:#BFBFBF;"><font face="Calibri" size="2"><span style="font-size:11pt;background-color:#BFBFBF;">ID</span></font></td>
		<td style="background-color:#BFBFBF;"><font face="Calibri" size="2"><span style="font-size:11pt;background-color:#BFBFBF;">Anmerkung</span></font></td>
	</tr>
	<tr height="25" style="height:15pt;">
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">Testauto1</span></font></td>
		<td><font face="Calibri" size="2" color="red"><span style="font-size:11pt;">Kabel reparieren</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">Maßnahme</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">Mustermann</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">offen</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">19.09.14</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">80</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></td>
	</tr>
	<tr height="25" style="height:15pt;">
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">Testauto2</span></font></td>
		<td><font face="Calibri" size="2" color="red"><span style="font-size:11pt;">Kabel reparieren</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">Maßnahme</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">Mustermann</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">offen</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">19.09.14</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">81</span></font></td>
		<td><font face="Calibri" size="2"><span style="font-size:11pt;">&nbsp;</span></font></td>
	</tr>
</tbody>
</table>

Könnt ihr mir hierbei etwas auf die Sprünge helfen?
Das Ergebnis sollte wie folgt aussehen:
Code:
arr(0, 0) = Fahrzeug
arr(0, 1) = Kommentar
arr(0, 2) = Typ
arr(0, 3) = Verantwortlich
arr(0, 4) = Status
arr(0, 5) = Zieltermin
arr(0, 6) = ID
arr(0, 7) = Anmerkung

arr(1, 0) = Testauto1
arr(1, 1) = Kabel reparieren
arr(1, 2) = Maßnahme
arr(1, 3) = Mustermann
arr(1, 4) = offen
arr(1, 5) = 19.09.14
arr(1, 6) = 80
arr(1, 7) = ""

arr(2, 0) = Testauto2
arr(2, 1) = Kabel reparieren
arr(2, 2) = Maßnahme
arr(2, 3) = Mustermann
arr(2, 4) = offen
arr(2, 5) = 19.09.14
arr(2, 6) = 81
arr(2, 7) = ""

danke Feder
 
Eine Möglichkeit die mir spontan einfällt, einfach die Tabelle im IE öffnen und dann über die DOM-Hierarchie drauf zugreifen. An der Stelle kann man iterieren und die Werte in ein Array übertragen. Den String für sich genommen auseinanderzunehmen und zu analysieren, wäre keine gute Lösung. Sowas ist fehleranfällig und meist recht unflexibel wenn mal etwas geändert werden muss.
Unten ein einfaches Beispiel für den Einstieg (mit Excel 2010 und IE8 ausprobiert).


Nachschlagewerk: MSDN Eintrag zum IE Objektmodell

Code:
Private CWeb As SHDocVw.WebBrowser

Private Sub test2()
    Dim oDoc As Object, objTables As Object
    Dim sHTML As String
    
    'IE Objekt erzeugen'
    Set CWeb = CreateObject("InternetExplorer.Application")
    CWeb.Visible = False
    CWeb.Navigate2 "about:blank"
    
    'warten bis Ladevorgang abgeschlossen'
    Do
        DoEvents
    Loop Until CWeb.ReadyState >= READYSTATE_INTERACTIVE

    Set oDoc = CWeb.Document

    sHTML = "<html><head></head><body><table width=""1965"" style=""width:1179pt;margin-left:1.9pt;"">" & _
"<col width=""116"" style=""width:69.8pt;""><col width=""805"" style=""width:483.1pt;""><col width=""123"" style=""width:73.8pt;""><col width=""143"" style=""width:86.1pt;""><col width=""131"" style=""width:78.8pt;""><col width=""129"" style=""width:77.8pt;""><col width=""39"" style=""width:23.8pt;""><col width=""476"" style=""width:285.8pt;"">" & _
"<tbody>" & _
"<tr height=""25"" style=""height:15pt;"">" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">Testauto1</span></font></td>" & _
"<td><font face=""Calibri"" size=""2"" color=""red""><span style=""font-size:11pt;"">Kabel reparieren</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">Maßnahme</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">Mustermann</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">offen</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">19.09.14</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">80</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">&nbsp;</span></font></td>" & _
"</tr>" & _
"<tr height=""25"" style=""height:15pt;"">" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">Testauto2</span></font></td>" & _
"<td><font face=""Calibri"" size=""2"" color=""red""><span style=""font-size:11pt;"">Kabel reparieren</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">Maßnahme</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">Mustermann</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">offen</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">19.09.14</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">81</span></font></td>" & _
"<td><font face=""Calibri"" size=""2""><span style=""font-size:11pt;"">&nbsp;</span></font></td>" & _
"</tr>" & _
"</tbody>" & _
"</table></body></html>"

    oDoc.write sHTML
    
    'Zugriff auf eine konkrete Tabelle via Index (abhängig von der Reihenfolge im Dokument), 0-basierter Index'
    'die DOM-Hierarchie ist in diesem Fall: DOCUMENT --> BODY --> TABLE --> TBODY --> ROW --> CELL'
    Set objTables = oDoc.body.all.tags("table") ' "hole alle Tabellen aus dem Dokument"'
    With objTables(0).tBodies(0)                ' "verwende den ersten Körper der ersten Tabelle"'
        Debug.Print .Rows(0).Cells(0).innerText ' "Ausgabe: Wert aus 1. Zeile und erster Zelle"'
        Debug.Print .Rows(0).Cells(1).innerText ' "Ausgabe: Wert aus 1. Zeile und zweiter Zelle"'
        Debug.Print .Rows(0).Cells(2).innerText ' "Ausgabe: ..."'
        Debug.Print .Rows(1).Cells(0).innerText
        Debug.Print .Rows(1).Cells(1).innerText
        Debug.Print .Rows(1).Cells(2).innerText
    End With
    
    'aufräumen'
    CWeb.Quit 'immer schließen, sonst bleibt der IE-Prozess im Hintergrund offen'
    Set oDoc = Nothing
    Set CWeb = Nothing
End Sub
 
Zuletzt bearbeitet:
Zurück
Oben