Excel: Daten aus externer Quelle
Hallo zusammen,
folgende Situation: Ich habe Daten aus einer Quelle. In diesem Fall eine einfach HTML Tabelle aus dem Intranet. Diese Daten lade ich in Excel einfach über die Funktion: Externe Daten Abrufen aus Web.
Die Tabelle wird regelmäßig automatisch ergänzt. Einmal eingetragene Zeilen ändern sich aber nicht mehr.
Ich möchte jetzt die Daten in Excel übernehmen und dort ggf überschreiben können.
Beispiel: in einer Zelle steht ein falscher Wert. Diesen möchte ich in Excel korrigieren können, ohne das dieser mir mit dem nächsten Aktualisieren wieder überschrieben wird. In der HTML Tabelle würde weiterhin der falsche Wert drin stehen.
Hat jemand eine Idee?
Meine erste Idee war, die Daten aus dem Tabellenblatt mit der Verknüpfung zu der HTML Tabelle irgenwie per Makro? in eine anderes Tabellen Blatt zu kopieren. Leider habe ich so etwas noch nie gemacht.
Vielen Dank für die Hilfe
folgende Situation: Ich habe Daten aus einer Quelle. In diesem Fall eine einfach HTML Tabelle aus dem Intranet. Diese Daten lade ich in Excel einfach über die Funktion: Externe Daten Abrufen aus Web.
Die Tabelle wird regelmäßig automatisch ergänzt. Einmal eingetragene Zeilen ändern sich aber nicht mehr.
Ich möchte jetzt die Daten in Excel übernehmen und dort ggf überschreiben können.
Beispiel: in einer Zelle steht ein falscher Wert. Diesen möchte ich in Excel korrigieren können, ohne das dieser mir mit dem nächsten Aktualisieren wieder überschrieben wird. In der HTML Tabelle würde weiterhin der falsche Wert drin stehen.
Hat jemand eine Idee?
Meine erste Idee war, die Daten aus dem Tabellenblatt mit der Verknüpfung zu der HTML Tabelle irgenwie per Makro? in eine anderes Tabellen Blatt zu kopieren. Leider habe ich so etwas noch nie gemacht.
Vielen Dank für die Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 511157
Url: https://administrator.de/contentid/511157
Ausgedruckt am: 25.11.2024 um 06:11 Uhr
9 Kommentare
Neuester Kommentar
Moin,
Gruß
Zitat von @schneerunzel:
Meine erste Idee war, die Daten aus dem Tabellenblatt mit der Verknüpfung zu der HTML Tabelle irgenwie per Makro? in eine anderes Tabellen Blatt zu kopieren. Leider habe ich so etwas noch nie gemacht.
Meine erste Idee war, die Daten aus dem Tabellenblatt mit der Verknüpfung zu der HTML Tabelle irgenwie per Makro? in eine anderes Tabellen Blatt zu kopieren. Leider habe ich so etwas noch nie gemacht.
STRG+A
STRG+C
ALT+SHIFT+F1
STRG+ALT+V
ALT+W
ENTER
Gruß
Zitat von @Kraemer:
STRG+A
> STRG+C
> ALT+SHIFT+F1
ALT-TAB # fehlte hier ;-)
> STRG+ALT+V
> ALT+W
> ENTER
>
nope - damit würdest du - vorausgesetzt eine weitere Anwendung läuft - Excel verlassen
Moin,
Gehen tut fast alles, aber du wirsft ja nicht gerade mit Infos um dich...
Optimal wäre es, wenn du Beispiele (anonymisiert) hier per Screenshot mal bereitstellen würdest.
Gruß
em-pie
Gehen tut fast alles, aber du wirsft ja nicht gerade mit Infos um dich...
- Gibt es Schlüsselfelder (IDs, Zeitstempel, ...) in der HTML-Tabelle?
- Werden neue Datensätze immer zu Beginn oder ans Ende der HTML-Tabelle eingefügt oder sind die quer durcheinander?
- Wie sieht die Zielstruktur (Excel) aus?
Optimal wäre es, wenn du Beispiele (anonymisiert) hier per Screenshot mal bereitstellen würdest.
Gruß
em-pie
Servus Schneerunzel.
Man nehme als Bsp. folgende HTML Datei an von der die Daten abgerufen werden
Dann nehme man den folgenden VBA Code, passe die abgerufene URL und das ID-Attribut der Tabelle auf der jeweiligen Seite an, zusätzlich welche Spalte auf der HTML-Tabelle und in der Lokalen Tabelle die Schlüsselspalte sein soll.
(Das Beispiel ist auf die obige HTML-Tabelle angepasst bei der die ID "mytable" lautet und die Schlüsselspalte die erste Spalte ist. Kommentare zu jeder Zeile findest du im Code unten.)
Der Code fügt nur Zeilen in die lokale Tabelle ein sofern die ID lokal noch nicht vorhanden ist.
Sollte die HTML/PHP-Seite Ihre Daten nicht explizit vom Cache ausnehmen durch entsprechende Header oder META-Tags musst du der URL im Nachhinein noch einen random URL-Parameter mitgeben (z.B. mit den ticks der aktuellen Zeit) damit die HTML-Daten nicht aus dem Cache abgerufen werden.
Viel Spaß
Grüße Uwe
Man nehme als Bsp. folgende HTML Datei an von der die Daten abgerufen werden
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="pragma" content="no-cache" />
<title>HTML Dokument</title>
</head>
<body>
<table border="0" width="" id="mytable">
<tr>
<th>ID</th>
<th>Spalte 2</th>
<th>Spalte 3</th>
<th>Spalte 4</th>
<th>Spalte 5</th>
</tr>
<tr>
<td>1</td>
<td>200</td>
<td>300</td>
<td>400</td>
<td>500</td>
</tr>
<tr>
<td>2</td>
<td>2000</td>
<td>3000</td>
<td>4000</td>
<td>5000</td>
</tr>
<tr>
<td>3</td>
<td>20000</td>
<td>30000</td>
<td>40000</td>
<td>50000</td>
</tr>
</table>
</body>
</html>
(Das Beispiel ist auf die obige HTML-Tabelle angepasst bei der die ID "mytable" lautet und die Schlüsselspalte die erste Spalte ist. Kommentare zu jeder Zeile findest du im Code unten.)
Der Code fügt nur Zeilen in die lokale Tabelle ein sofern die ID lokal noch nicht vorhanden ist.
Sollte die HTML/PHP-Seite Ihre Daten nicht explizit vom Cache ausnehmen durch entsprechende Header oder META-Tags musst du der URL im Nachhinein noch einen random URL-Parameter mitgeben (z.B. mit den ticks der aktuellen Zeit) damit die HTML-Daten nicht aus dem Cache abgerufen werden.
Sub OneWaySyncHtmlTableWithLocalTable()
On Error GoTo Errhandler
' Variables
Dim tbl As String, ws As Worksheet, objIE As Object, objTable As Object, tblLocal As ListObject, lRow As ListRow, rngOut As Range, r As Long, c As Long, strID As String, f As Range
' Work on Sheet 1
With Sheets(1)
' create ie object
Set objIE = CreateObject("InternetExplorer.Application")
' work with ie object
With objIE
' window is hidden
.Visible = False
' navigate to website
.Navigate "https://domain.tld.net/seite.html"
' wait while loading
While .Busy
DoEvents
Wend
' find table dom object with id attribute
Set objTable = .document.GetElementById("mytable")
' if table not found exit sub
If objTable Is Nothing Then
MsgBox "Tabelle konnte nicht geladen werden.", vbExclamation
Exit Sub
End If
' load table data into 2-dimensional array object
Dim arrData As Variant
With objTable
ReDim arrData(0 To .Rows.Length - 1, 0 To .Rows(1).Cells.Length - 1)
For r = 0 To .Rows.Length - 1
For c = 0 To .Rows(r).Cells.Length - 1
arrData(r, c) = .Rows(r).Cells(c).innerText
Next
Next
End With
End With
On Error Resume Next
' refer to local datatable as listobject
Set tblLocal = .ListObjects("mydatatable")
If Err.Number <> 0 Then
' local table does not exist, write table data to range and create list object from it
Set rngOut = .Range("A1").Resize(UBound(arrData, 1) + 1, UBound(arrData, 2) + 1)
rngOut.Value = arrData
Set tblLocal = .ListObjects.Add(xlSrcRange, rngOut)
tblLocal.Name = "mydatatable"
Else
' Local table listobject already exists
With objTable
' for each row (exlcluding headers) in web data
For r = 1 To UBound(arrData, 1)
' column 1 of web data is our reference column
strID = arrData(r, 0)
' find reference in column 1 in listobject
Set f = tblLocal.ListColumns(1).DataBodyRange.Find(strID, LookIn:=xlValues, LookAt:=xlWhole)
' only if it was not found
If f Is Nothing Then
' create new ListRow
Set lRow = tblLocal.ListRows.Add
' and add data from current row to ListObject
For c = 0 To UBound(arrData, 2)
lRow.Range(1, c + 1).Value = arrData(r, c)
Next
End If
Next
End With
End If
On Error GoTo Errhandler
' quit IE
objIE.Quit
End With
Exit Sub
Errhandler:
If Not objIE Is Nothing Then objIE.Quit
MsgBox "Es ist ein Fehler aufgetreten:" & vbNewLine & vbNewLine & Err.Description, vbExclamation
End Sub
Grüße Uwe